使用日期范围进行的mySQL查询,并仅选择每个ID的最新记录。

4

我有以下表格:

Record   ID   Status     Date          Timestamp
----------------------------------------------------------
1        1    waiting    2010-02-02    2010-02-02 12:00:00
2        1    finished   2010-02-02    2010-02-02 12:30:00
3        2    waiting    2009-02-02    2009-02-02 12:00:00

我想要获取日期在2010年1月1日至2010年3月3日期间的记录。 (这应该给我记录1和2)

此外,我想要获取每个ID中仅最新的记录(具有最近的时间戳)。 (这应该只给我记录2)。

我不确定我需要如何构建我的查询。我已经成功建立了以下查询:

SELECT   `Record` `ID`, MAX(  `Timestamp` ) 
FROM     `myTable` 
WHERE    `Date` 
BETWEEN  '2010-01-01'
AND      '2011-03-03'
GROUP BY `ID` 

上述查询存在问题,因为它给出了以下结果:
Record   ID   Timestamp
---------------------------------
1        1    2010-02-02 12:30:00

除了“记录”字段应该是2而不是1之外,其余都正确。

2个回答

3
SELECT t1.* 
FROM `myTable` t1
INNER JOIN
(
SELECT MAX(`Timestamp`) as Timestamp
FROM     `myTable`
WHERE    `Date` 
BETWEEN  '2010-01-01'
AND      '2011-03-03'
GROUP BY `ID` 
) t2
ON t1.Timestamp = t2.Timestamp

0

请尝试以下查询

SELECT   `Record` `ID`,Timestamp
FROM     `myTable` 
WHERE    `Date` 
BETWEEN  '2010-01-01'
AND      '2011-03-03'
Order by `Timestamp` desc
limit 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接