我想在mysql中获取每一天的最后一条记录。Location<id, date, place_id>
表每天都有多个条目。此Location表具有place_id和插入place_id的时间。
另外考虑如果place_id不存在则返回具有place_id的倒数第二条记录。在NULL, '2016-04-06 18:52:06'
记录的下表中,我们将返回'13664', '2016-04-06 12:57:30'
,这是2016-04-06&#39; 2016-04-06&#39; (3月6日)并且有place_id。
还有一件事,在一天中,会有更多的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'
当我运行以下查询时,它返回以下结果
查询我运行以下查询,但它给出了错误的结果
`Location<id, place_id, date>`
select L1.place_id, L1.date from
Location1 L1
Left join
Location1 L2
on
Date(L1.date) = Date(L2.date)
And
L1.date < L2.date
where
L2.date is null
group by L1.date;
我想要的结果:
id....place_id ........date
'1', '47', '2016-04-05 18:09:37'
'3', '13664', '2016-04-06 12:57:30'
'4', '9553', '2016-04-08 10:09:37'
'9', '7', '2016-04-07 05:34:57'
答案 0 :(得分:5)
你可以尝试一下:
SELECT
L.id,
L.place_id,
L.date
FROM Location L
INNER JOIN
(
SELECT
MAX(date) max_time
FROM Location
GROUP BY Date(`date`)
) AS t
ON L.date = t.max_time
[ 根据您的预期输出 ]
答案 1 :(得分:2)
您可以尝试使用以下查询:
SELECT * FROM `Location` GROUP BY DATE(`date`) ORDER BY `date` DESC
此查询的作用是按降序日期对行进行分组,并为每个日期显示一行。
获取最后一条记录:
SELECT * FROM `Location` ORDER BY `date` LIMIT 1;
获取没有 null 的最后一条记录作为值:
SELECT * FROM `Location` WHERE place_id IS NOT NULL ORDER BY `date` LIMIT 1;
获取所有非空的地方的记录:
SELECT * FROM `Location` WHERE place_id IS NOT NULL GROUP BY `place_id` ORDER BY `date` DESC
答案 2 :(得分:0)
这会有用吗?
select place_id, max(date) as MaxDate
from foo
where place_id is not NULL
group by place_id