【问题标题】:MySQL correlated subquery ordered by date&timeMySQL 按日期时间关联子查询顺序
【发布时间】:2013-04-07 16:03:04
【问题描述】:

下午所有, 我是stackoverflow处女,所以请放轻松。我很难从数据库中检索我需要的信息,并相信相关的子查询可能是答案,但我不确定。

我需要的所有信息都来自一张表:

╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦═════════════╗
║ COL1 ║     COL2     ║   FILENAME   ║    COL4    ║ COL5 ║      DATETIME       ║    COL7     ║
╠══════╬══════════════╬══════════════╬════════════╬══════╬═════════════════════╬═════════════╣
║    2 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:23:09 ║ Checked In  ║
║    3 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:24:06 ║ Checked Out ║
║    4 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:24:20 ║ Checked In  ║
║    5 ║ generaluser1 ║ restdoc3.txt ║ Restricted ║ XP1  ║ 2013-04-04 19:25:04 ║ Checked In  ║
║    6 ║ generaluser1 ║ restdoc3.txt ║ Restricted ║ XP1  ║ 2013-04-04 19:26:08 ║ Checked Out ║
║    7 ║ generaluser1 ║ restdoc3.txt ║ Restricted ║ XP1  ║ 2013-04-04 19:26:21 ║ Checked In  ║
║    8 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:26:51 ║ Checked Out ║
║    9 ║ generaluser1 ║ restdoc3.txt ║ Restricted ║ XP1  ║ 2013-04-04 19:28:41 ║ Checked Out ║
║   10 ║ generaluser1 ║ restdoc3.txt ║ Restricted ║ XP1  ║ 2013-04-04 19:31:01 ║ Checked In  ║
║   11 ║ generaluser2 ║ restdoc3.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:31:13 ║ Checked Out ║
║   12 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:33:03 ║ Checked In  ║
║   13 ║ generaluser2 ║ restdoc3.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:28 ║ Checked In  ║
║   14 ║ generaluser2 ║ restdoc4.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:36 ║ Checked In  ║
╚══════╩══════════════╩══════════════╩════════════╩══════╩═════════════════════╩═════════════╝

我要做的是为日期时间最新的每个文档名称 (col2) 检索一行。

因此,我想为上述行检索/输出的结果将是:

╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦════════════╗
║ COL1 ║     COL2     ║   FILENAME   ║    COL4    ║ COL5 ║      DATETIME       ║    COL7    ║
╠══════╬══════════════╬══════════════╬════════════╬══════╬═════════════════════╬════════════╣
║   12 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:33:03 ║ Checked In ║
║   13 ║ generaluser2 ║ restdoc3.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:28 ║ Checked In ║
║   14 ║ generaluser2 ║ restdoc4.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:36 ║ Checked In ║
╚══════╩══════════════╩══════════════╩════════════╩══════╩═════════════════════╩════════════╝

我可以设法获取我选择的文档或所有文档的最新行,但不能获取每个唯一文档的最新行。

提前感谢任何帮助我的人。

【问题讨论】:

    标签: mysql sql greatest-n-per-group correlated-subquery


    【解决方案1】:

    假设包含文件名的列名是FileName,包含日期和时间的列是DateTime

    SELECT  a.*
    FROM    TableName a
            INNER JOIN
            (
                SELECT  FileName, MAX(DateTime) max_date
                FROM    TableName
                GROUP   BY FileName
            ) b ON a.FileName = b.FileName AND
                    a.DateTime = b.max_Date
    

    输出

    ╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦════════════╗
    ║ COL1 ║     COL2     ║   FILENAME   ║    COL4    ║ COL5 ║      DATETIME       ║    COL7    ║
    ╠══════╬══════════════╬══════════════╬════════════╬══════╬═════════════════════╬════════════╣
    ║   12 ║ generaluser1 ║ shared2.txt  ║ Shared     ║ XP1  ║ 2013-04-04 19:33:03 ║ Checked In ║
    ║   13 ║ generaluser2 ║ restdoc3.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:28 ║ Checked In ║
    ║   14 ║ generaluser2 ║ restdoc4.txt ║ Restricted ║ XP2  ║ 2013-04-04 19:33:36 ║ Checked In ║
    ╚══════╩══════════════╩══════════════╩════════════╩══════╩═════════════════════╩════════════╝
    

    【讨论】:

    • 像梦中的 JW 一样工作。我不知道连接对单个表有任何用处。非常感谢,非常感谢。
    【解决方案2】:

    查询:

    SQLFIDDLEexample

    SELECT a.*
    FROM TableName a
    WHERE a.DateTime = (SELECT MAX(b.DateTime)
                        FROM TableName b
                        WHERE b.FileName = a.FileName)
    

    结果:

    | COL1 |         COL2 |     FILENAME |       COL4 | COL5 |                     DATETIME |       COL7 |
    ------------------------------------------------------------------------------------------------------
    |   12 | generaluser1 |  shared2.txt |     Shared |  XP1 | April, 04 2013 19:33:03+0000 | Checked In |
    |   13 | generaluser2 | restdoc3.txt | Restricted |  XP2 | April, 04 2013 19:33:28+0000 | Checked In |
    |   14 | generaluser2 | restdoc4.txt | Restricted |  XP2 | April, 04 2013 19:33:36+0000 | Checked In |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多