SQL 中 table 的第一次和第二次约会

First and second date from table in SQL

在 SQL 中,我试图从 table 中提取第一个和第二个日期。我正在使用下面的查询,它是根据我在这里阅读的关于同一主题的许多帖子制定的,即提取第二个日期等。但出于某种原因,它没有给我正确的答案,我不明白为什么。

table 称为 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" 是第二次约会?

我也试过许多其他用户,两列都给出了相同的日期。

谢谢

试试这个:

SELECT *  FROM motif_segmentvalue sv2
WHERE sv2.UserId = "5407" 
ORDER BY EntryDate ASC
LIMIT 2

如果我理解正确,我将通过几个步骤构建该查询。

首先求绝对最小值

select  UserId, min(EntryDate)
from    motif_segmentvalue
where   UserId = "5407" 
group by UserId

然后获取下一个最小值(使用上面的查询)

select  UserId, min(EntryDate)
from    motif_segmentvalue
where   UserId = "5407" and
        EntryDate > (
            select  UserId, min(EntryDate)
            from    motif_segmentvalue
            where   UserId = "5407" 
            group by UserId
        )
group by UserId

终于加入了两个

select  t1.UserId, t1.min_1, t2.min_2
from    (
            select  UserId, min(EntryDate) as min_1
            from    motif_segmentvalue
            where   UserId = "5407" 
            group by UserId
        ) t1
join    (
            select  UserId, min(EntryDate) as min_2
            from    motif_segmentvalue
            where   UserId = "5407" and
                    EntryDate > (
                        select  UserId, min(EntryDate)
                        from    motif_segmentvalue
                        where   UserId = "5407" 
                        group by UserId
                    )
            group by UserId
        ) t2
on      t1.UserId = t2.UserId

我想这会让你得到你想要的。

它有一个 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"