SQL根据另一列(时间戳)选择第一行和最后一行

时间:2015-02-17 01:18:44

标签: mysql sql sql-server hql

您好我正在尝试在表格上选择某些元素。 这是我的桌子的样子 时间,UsrerId,数据。 现在我想做的是对于同一个用户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 

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您可以使用maxmin聚合加入表格:

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)

答案 1 :(得分:1)

首先找到每time的最小和最大userID,然后将结果连接回主表以获取其他信息。试试这个。

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

答案 2 :(得分:-1)

SELECT   MIN(Time), MAX(Time), UserID, Data
FROM     yourtable
GROUP BY UserID, Data