Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL根据另一列(时间戳)选择第一行和最后一行_Mysql_Sql_Sql Server_Hql - Fatal编程技术网

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

Mysql SQL根据另一列(时间戳)选择第一行和最后一行,mysql,sql,sql-server,hql,Mysql,Sql,Sql Server,Hql,您好,我正在尝试在表上选择某些元素。 这是我的桌子的样子 时间,UsrerId,数据。 现在我要做的是,对于同一个userid,我希望根据时间戳得到数据的第一个和最后一个值 例如: 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

您好,我正在尝试在表上选择某些元素。 这是我的桌子的样子 时间,UsrerId,数据。 现在我要做的是,对于同一个userid,我希望根据时间戳得到数据的第一个和最后一个值

例如:

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 

如果我正确理解了您的问题,您可以使用
max
min
聚合将表本身连接起来:

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)

首先查找每个
用户ID的最小和最大
时间
,然后将结果连接回主表以获取其他信息。试试这个

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)

根据时间戳,这将如何成为数据的第一个和最后一个值?你能看看问题中的注释吗?这不是我想要的,我认为这不正确。我想要的是有点不同。请看一下我做得对的修改后的问题now@realcoder--这应该能回答你当前的问题-它怎么不正确?如果你有不同的问题,也许你应该发布一个新的…我正在检查这个。让我用我拥有的扩展数据来完成这个查询,并将发布我需要的结果get@realcoder这并不意味着这是不正确的,仅仅因为你的问题不完整。我们的目标是得到这个想法,并尝试自己去实现它,而不是寻找确切的答案。好吧……很抱歉。我是stackoverflow的新手,所以不知道该做什么和不该做什么。。。无论如何谢谢示例:时间用户ID数据8 PM 1200 9 PM 1300 10 PM 1100 8 PM 2150 9 PM 2250 PM 2350 8 PM 3100所以我的结果应该是:8 PM 1200 10 PM 1100 8 PM 2150 10 PM 2350 8 PM 3100这是否更清楚?如此不同的用户ID,当同一用户ID有多条记录时,请删除第一条和最后一条记录按时间排序你能看看问题中的评论吗这不是我想要的
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)