在 SQL 中,我试图从表中提取第一个和第二个日期。我正在使用下面的查询,它是根据我在这里阅读的关于同一主题的许多帖子制定的,即提取第二个日期等。但出于某种原因,它没有给我正确的答案,我不明白为什么。
该表名为 motif_segmentvalue
,它有一个名为 EntryDate
的列,我有兴趣用它来提取日期。我为特定用户 5407
编写了一个小查询,以查看我是否获得了正确的结果。
select sv2.UserId, sv2.EntryDate, min(sv2.EntryDate)
from motif_segmentvalue sv2
where sv2.EntryDate > (select MIN(sv3.EntryDate) from motif_segmentvalue sv3)
and sv2.UserId = "5407"
我得到的输出是:
UserId EntryDate min(sv2.EntryDate)
5407 2016-01-20 12:50:00 2016-01-20 12:50:00
根据我的数据,这是不正确的,“EntryDate”列应该有一个与 min(sv2.EntryDate) 不同的日期 - 它应该有第二个日期。但出于某种原因,它没有。我不明白我做错了什么。任何人都可以提供有关我可能做错了什么的提示吗?我是否错误地认为“EntryDate”是第二次约会?
我也尝试过许多其他用户,并且两列都给出了相同的日期。
谢谢
最佳答案
我想这会让你得到你想要的。
它有一个 2050-01-01 日期作为没有第二个日期时的备份
select sv2.UserId, min(sv2.EntryDate) as first
, min(if(sv2.EntryDate=mindate,'2050-01-01', sv2.EntryDate)) as second
from motif_segmentvalue sv2
join (
select sv3.UserId, min(sv3.EntryDate) as mindate
FROM motif_segmentvalue sv3
WHERE sv3.UserId = "5407"
) as temp ON temp.UserId = sv2.UserId
WHERE sv2.UserId = "5407"
更新: 这将获取第二个日期,而不是下一个日期时间。
select sv2.UserId, min(sv2.EntryDate) as first
, min(if(date(sv2.EntryDate)=mindate,'2050-01-01', sv2.EntryDate)) as second
from motif_segmentvalue sv2
join (
select sv3.UserId, min(date(sv3.EntryDate)) as mindate
FROM motif_segmentvalue sv3
WHERE sv3.UserId = "5407"
) as temp ON temp.UserId = sv2.UserId
WHERE sv2.UserId = "5407"
关于mysql - SQL中表的第一个和第二个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43004408/