【发布时间】:2016-07-27 20:22:43
【问题描述】:
在下表中,我想返回过去 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'
【问题讨论】:
-
@Strawberry 我有主键,但现在我只显示部分表,我现在更改查询,请查看我修改后的查询..
-
@Strawberry,这里我取主键是自动递增..
-
@Strawberry 谢谢我更新了..
-
@Strawberry,对不起,我错误地插入了重复记录,它不会出现在结果中,但结果将是
'9', '7', '2016-04-07 05:34:57',即将到来,我只关心如果place_id如何取倒数第二条记录在 24 小时内为空.. -
您的
group by S1.date;肯定也会包含时间吗?所以你需要GROUP BY DATE(S1.date);然后添加一个条件来过滤掉place_id IS NOT NULL?
标签: mysql