[英]MySQL query: selecting latest results
我有一个包含数据的MySQL表,并且想为进行的特定测试选择最新的条目。
table: research
columns: id (int), projectid (int), test (varchar),
when (datetime), result (longtext)
行示例:
1, 6, "Test1", 01-01-2013 12:15, "AAAAA"
2, 6, "Test1", 01-01-2013 13:15, "BBBBB"
3, 6, "Test2", 01-01-2013 16:00, "CCCCC"
4, 6, "Test2", 01-01-2013 16:15, "DDDDD"
5, 6, "Test2", 01-01-2013 16:30, "EEEEE"
如果我想要“测试1”的最新结果,请使用..
SELECT *
FROM research
WHERE projectid=6 AND test='Test1'
ORDER BY when DESC limit 1
但是,如何在一个查询中获得单个项目中每个测试的最新结果? 我试过了:
SELECT research.*
FROM research INNER JOIN (SELECT MAX(id) AS id
FROM research
WHERE projectid=".$ProjectId."
GROUP BY test) ids
ON research.id = ids.id
WHERE research.projectid=".$ProjectId
但这并不能为我提供测试的最新结果,它可以为我提供最久的结果。
子查询背后的想法是,它分别为每个projectid和test获取最新的WHEN
日期。 然后将其结果重新加入原始表中。
SELECT a.*
FROM research a
INNER JOIN
(
SELECT projectid, test, MAX(`when`) maxDate
FROM research
GROUP BY projectid, test
) b ON a.projectid = b.projectid AND
a.test = b.test AND
a.`when` = b.maxDate
您可以将WHERE
与IN
,以过滤max(when)
日期max(when)
:
select *
from research r
where r.projectid = 6
and r.`when` in (select max(`when`)
from research
group by projectid, test);
尝试这个:
SELECT test,when,result
FROM research r1
WHERE when = (SELECT max(when)
FROM research r2
WHERE r2.test=r1.test)
因此,要获得每个项目的每个测试( when
列最大的行),可以使用此命令:
SELECT r.*
FROM research AS r
JOIN
( SELECT projectid, test, MAX(`when`) AS maxw
FROM research
GROUP BY projectid, test
) AS m
ON m.projectid = r.projectid
AND m.test = r.test
AND m.maxw = r.`when` ;
对于单个项目的每个测试(例如项目6
):
SELECT r.*
FROM research AS r
JOIN
( SELECT test, MAX(`when`) AS maxw
FROM research
WHERE projectid = 6
GROUP BY test
) AS m
ON m.test = r.test
AND m.maxw = r.`when`
WHERE r.projectid = 6 ;
(projectid, test, when)
的索引将有助于上述两个查询的效率。
请尝试下面的查询。
SELECT `e`.* FROM (
SELECT `r`.*
FROM research `r`
ORDER By `r`.`when`
DESC
)`e`
WHERE `e`.`projectid`= $ProjectId GROUP BY `e`.`test`
我希望这有帮助。
谢谢。
在分区内按测试分区和按日期排序。 使用分析功能。 无需在上方/下方进行复杂的查询...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.