您好我正在尝试在表格上选择某些元素。这是我的表看起来像Time,UsrerId,Data。现在我想做的是对于同一个用户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
所以我的结果应该是这样的:
1 200 100
2 150 350
3 100 100
答案 0 :(得分:2)
根据min
max
和userid
时间
然后Join
主表与userid
和min time
的结果,以获得每min
的{{1}}个数据
然后再次将结果与主表格userid
和userid
结合,以获得每max time
max
数据
试试这个。
userid
<强> SqlFiddle Demo 强>
答案 1 :(得分:1)
这有几个步骤。
首先是找到每个用户ID的最早和最晚时间。你喜欢这样:
SELECT UserID,
MIN(Time) startTime,
MAX(Time) endTime
FROM theTable
GROUP BY UserID
然后,您需要使用该结果来获取与开始时间关联的数据。您可以通过加入上述摘要查询(虚拟表)来实现这一点。
SELECT b.UserID,
b.Data startData
FROM (
SELECT UserID,
MIN(Time) startTime,
MAX(Time) endTime
FROM theTable
GROUP BY UserID
) a
JOIN theTable b ON a.UserID = b.UserID AND a.startTime = b.Time
最后,您需要以类似的方式处理最终值。
SELECT b.UserID,
b.Data startData,
c.Data endData
FROM (
SELECT UserID,
MIN(Time) startTime,
MAX(Time) endTime
FROM theTable
GROUP BY UserID
) a
JOIN theTable b ON a.UserID = b.UserID AND a.startTime = b.Time
JOIN theTable c ON a.UserID = c.UserID AND a.startTime = c.Time
这是一个稍微棘手的查询,因为您必须将表连接两次以从中获取两个详细信息行(开始和结束时间行)。
建立查询的“俱乐部三明治”方法应该有助于明确其工作原理。