SQL select 第一行和最后一行基于另一列(时间戳)

SQL select the first and the last row based on another column (timestamp)

您好,我正在尝试对 table 上的某些元素进行 select。 这是我的 table 的样子 时间、用户 ID、数据。 现在我想要做的是对于同一个用户标识,我想要根据时间戳的数据的第一个和最后一个值。

示例:

Time UserID Data 
8 PM 1 200 
9 PM 1 300 
10 PM 1 100 
8 PM 2 150 
9 PM 2 250 
10 PM 2 350 
8 PM 3 100 

所以我的结果应该是这样的:

8 PM 1 200 
10 PM 1 100 
8 PM 2 150 
10 PM 2 350 
8 PM 3 100 
SELECT   MIN(Time), MAX(Time), UserID, Data
FROM     yourtable
GROUP BY UserID, Data

如果我对你的问题的理解正确,你可以使用 maxmin 聚合将 table 加入自身:

select y.time, y.userid, y.data
from yourtable y
   join (select userid, min(time) mintime, max(time) maxtime
         from yourtable
         group by userid 
   ) t on y.userid = t.userid and y.time in (t.mintime, t.maxtime)

首先找到每个 userID 的最小值和最大值 time 然后将结果加入主 table 以获取其他信息。试试这个。

select A.Time, A.UserID, A.Data from yourtable A
join 
(
SELECT   UserID, MIN(Time) AS Min_Time, MAX(Time) AS Max_Time
FROM     yourtable
GROUP BY UserID
) B 
ON a.UserID = B.UserID
and A.time in (B.Min_Time, B.Max_Time) -- (A.time =B.Min_Time or A.time =B.Max_Time)

SqlFiddle Demo