在下表中,我想返回过去24小时范围内的每个最后记录。另外考虑如果place_id不存在则返回具有place_id的倒数第二条记录。在NULL, '2016-04-06 18:52:06'
记录的下表中,我们将返回'13664', '2016-04-06 12:57:30'
,这是24小时内的第二个记录,并且有place_id。
id || place_id || date
'1', '47', '2016-04-05 18:09:37'
'2', '48', '2016-04-05 12:09:37'
'3', '13664', '2016-04-06 12:57:30'
'4', '9553', '2016-04-08 10:09:37'
'5', NULL, '2016-04-06 18:52:06'
'6', '9537', '2016-04-07 03:34:24'
'7', '9537', '2016-04-07 03:34:24'
'8', '656', '2016-04-07 05:34:24'
'9', '7', '2016-04-07 05:34:57'
当我运行以下查询时,它返回以下结果
查询我更改了查询但它给了我NULL
select S1.place_id, S1.date from
status TTS1
Left join
status TTS2
on
Date(S1.date) = Date(S2.date)
And
S1.date < S2.date
where
S2.date is null and S1.location_id=38298
group by S1.date;
结果
'47', '2016-04-05 18:09:37'
NULL, '2016-04-06 18:52:06'
'7', '2016-04-07 05:34:57'
'9553', '2016-04-08 10:09:37'
但是这个结果不正确,它是NULL
,如果有NULL则返回当天的第二个最后一个条目..
正确结果:
'47', '2016-04-05 18:09:37'
'13664', '2016-04-06 12:57:30'
'9553', '2016-04-08 10:09:37'
'7', '2016-04-07 05:34:57'
答案 0 :(得分:0)
试试这个
select distinct s.place_id, s.date from base_status s
where s.locatoin_id=38298 group by Date(s.date) order by s.date DESC;
答案 1 :(得分:0)
请查看是否有效:
select s.*
from (SELECT s.place_id, max(s.date) as maxdate
FROM base_status s
GROUP BY place_id
) ss join
base_status s
on ss.place_id = s.place_id and ss.maxdate = s.date;
答案 2 :(得分:0)
在这种情况下,您需要使用GROUP BY
。我想你没有在这里给出完整的架构信息。所以我可能错过了一些领域。
以下查询返回您想要的结果集:
SELECT *
FROM `status`
WHERE date IN
(
SELECT MAX(s.date)
FROM `status` s
WHERE IFNULL(s.place_id,'') <> ''
GROUP BY CAST(s.date AS DATE)
)
<强>说明:强>
你不需要在这里自我加入。逻辑是Group By Date
,然后获得Maximum DateTime record
。
答案 3 :(得分:0)
SELECT x.*
FROM my_table x
JOIN
( SELECT MAX(date) max_date
FROM my_table
WHERE place_id IS NOT NULL
GROUP
BY DATE(date)
) y
ON y.max_date = x.date;
我仍然认为你有一个问题,其中最大值不是唯一的。