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
如果我对你的问题的理解正确,你可以使用 max
和 min
聚合将 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)
您好,我正在尝试对 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
如果我对你的问题的理解正确,你可以使用 max
和 min
聚合将 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)