MySQL按日期排序的相关子查询&;时间
下午好,, 我是处女,请对我宽容点。我很难从数据库中检索到我需要的信息,我相信相关子查询可能是答案,但我不确定 我需要的所有信息都来自一个表:MySQL按日期排序的相关子查询&;时间,mysql,sql,greatest-n-per-group,correlated-subquery,Mysql,Sql,Greatest N Per Group,Correlated Subquery,下午好,, 我是处女,请对我宽容点。我很难从数据库中检索到我需要的信息,我相信相关子查询可能是答案,但我不确定 我需要的所有信息都来自一个表: ╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦═════════════╗ ║ COL1 ║ COL2 ║ FILENAME ║ COL4 ║ COL5 ║ DATETIME ║
╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦═════════════╗
║ 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)检索一行,其中datetime是最新的
因此,我想为上述行重新筛选/输出的结果仅为:
╔══════╦══════════════╦══════════════╦════════════╦══════╦═════════════════════╦════════════╗
║ 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 ║
╚══════╩══════════════╩══════════════╩════════════╩══════╩═════════════════════╩════════════╝
我可以为我选择的文档或所有文档获取最新行,但不能为每个唯一文档获取最新行
提前感谢所有帮助我的人 假设包含文件名的列名是
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 ║
╚══════╩══════════════╩══════════════╩════════════╩══════╩═════════════════════╩════════════╝
查询:
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 |
像梦一样工作。我不知道联接在单个表上有任何用处。非常感谢,非常感谢。