我有一个看起来像这样的表,我想获取每个loc_id的最新insp_date的ID(insp_id)。
create table insp (
insp_id int (10),
loc_id int (11),
insp_type varchar (150),
insp_date date ,
insp_active tinyint (2),
insp_created timestamp ,
insp_modified timestamp
);
我尝试了从表(日期时间字段)中的“选择最新记录”中选择“ IN”策略,但其他方法却使我加倍,因为一个loc_id的最新日期可能不是另一个最新日期:
SELECT insp_id, loc_id, insp_active, insp_date
FROM insp
WHERE insp_active = 1
AND insp_date IN(SELECT MAX(insp_date) FROM insp WHERE insp_active = 1 GROUP BY loc_id)
ORDER BY loc_id ASC, insp_date DESC;
我设置了一个SQL Fiddle,但是添加各种GROUP BY和MAX似乎没有得到它。我觉得我需要加入子查询或类似的查询,但目前还不确定。
http://sqlfiddle.com/#!2/f95e0/1
谢谢,安德鲁
您需要获取MAX
每个位置的日期,然后获取该日期的MAX
insp_id
查询1:
SELECT insp.loc_id, max(insp.insp_id)
FROM insp
INNER JOIN
(SELECT loc_id, max(insp_date) as insp_date
FROM insp
WHERE insp_active = 1
GROUP BY loc_id) AS mdate ON mdate.loc_id = insp.loc_id AND
mdate.insp_date = insp.insp_date
WHERE insp_active = 1
GROUP BY insp.loc_id
结果:
| LOC_ID | MAX(INSP.INSP_ID) |
|--------|-------------------|
| 1 | 1 |
| 2 | 40 |
| 3 | 48 |
| 4 | 37 |
| 5 | 49 |
| 6 | 39 |
| 7 | 50 |
| 8 | 46 |
更新 :
如果在特定日期仅进行一次活动检查,并且这始终是最新的活动检查,则可以执行以下操作:
SELECT insp.loc_id, insp.insp_id
FROM insp
INNER JOIN
(SELECT loc_id, max(insp_date) as insp_date
FROM insp
WHERE insp_active = 1
GROUP BY loc_id) AS mdate ON mdate.loc_id = insp.loc_id AND
mdate.insp_date = insp.insp_date
WHERE insp_active = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句