【问题标题】:SQL: Return only first occurrenceSQL:只返回第一次出现
【发布时间】:2012-02-02 12:00:06
【问题描述】:

我很少使用 SQL,并且在我的存档中找不到任何类似的东西,所以我问这个简单的查询问题:我需要一个查询,它返回 personID 并且只有第一个 seenTime

记录:

seenID | personID | seenTime
   108      3         13:34
   109      2         13:56
   110      3         14:22
   111      3         14:31
   112      4         15:04
   113      2         15:52

想要的结果:

personID | seenTime
   3         13:34
   2         13:56
   4         15:04

这就是我所做的,但失败了:

SELECT t.attendanceID, t.seenPersonID, t.seenTime
(SELECT ROW_NUMBER() OVER (PARTITION BY seenID ORDER BY seenID) AS RowNo,
seenID,
seenPersonID,
seenTime
FROM personAttendances) t
WHERE t.RowNo=1

P.S:注意 SQL CE 4

【问题讨论】:

    标签: sql sql-server-ce sql-server-ce-4


    【解决方案1】:

    将此添加到您的 SQL 中:

    and where not exists
        (select 1 from personAttendances t2 
        where t.personID=t2.personID 
        and t2.seenID < t.seenID)
    

    【讨论】:

      【解决方案2】:

      您需要按看到的时间而不是看到的id来订购:

      PARTITION BY seenID ORDER BY seenTime
      

      【讨论】:

        【解决方案3】:

        如果您的 seenTime 随着 seenID 的增加而增加:

        select personID, min(seenTime) as seenTime
        from personAttendances
        group by personID
        

        另一个案例的更新:

        如果不是这种情况,并且您确实想要与最小 seenID 对应的 seenTime(假设 seenID 是唯一的):

        select a.personID, a.seenTime
        from personAttendances as a
            join (
                -- Get the min seenID for each personID
                select personID, min(seenID) as seenID
                from personAttendances
                group by personID
            ) as b on a.personID = b.personID
        where a.seenID = b.seenID
        

        【讨论】:

        • 工作得很好!非常感谢!
        【解决方案4】:

        你让这方式太难了:

        select personID, min(seenTime)
        from personAttendances
        group by personID
        

        【讨论】:

          【解决方案5】:

          对于PostgreSQL,有DISTINCT ON

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-01
            • 2012-07-30
            • 1970-01-01
            • 2019-12-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多