SQL 如何先排序后分组

MUGOER 2019-09-18 02:50:09
task 表(任务表)
ID type level url createtime

1 1 1 http://asf.com 2019-09-18 14:45:36
2 1 1 http://asfaf.com 2019-09-18 14:45:40

plan 表(任务详情表)
ID taskid userid state createtime

1 1 1 1 0 2019-09-18 14:45:50
2 2 1 1 0 2019-09-18 14:45:58


user 表(客户表)
ID username password usernick

1 admin 123456 测试
2 root 123456 管理员



SELECT *  FROM task inner join plan ON task.id = plan.taskid
inner join user ON plan.userid = user.id
WHERE
task.level = 1
GROUP BY plan.userid


业务想要统计结果只取一条 userid 为 1 的,结果是 task.createtime 以时间最早的优先出来

现在统计出来的结果是task.createtime 时间 2019-09-18 14:45:40 优先出来了, 2019-09-18 14:45:36 最后的先出来,

请问如何才能优先取出 2019-09-18 14:45:36 的而不是 2019-09-18 14:45:40

谢谢各位前辈
...全文
402 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MUGOER 2019-09-18
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
SELECT *
  FROM (   SELECT plan.ID,taskid,userid,state,plan.createtime AS pcreatetime,task.ID AS tid,type,level,url,task.createtime,user.ID AS uid,username,password,usernick
                  ,ROW_NUMBER() OVER (PARTITION BY plan.userid ORDER BY task.createtime) rn
             FROM task
            INNER JOIN plan
               ON task.ID     = plan.taskid
            INNER JOIN user
               ON plan.userid = user.ID
            WHERE task.level = 1) t
 WHERE rn = 1;
感谢回复,已测试通过,再次感谢!
MUGOER 2019-09-18
  • 打赏
  • 举报
回复
引用 2 楼 RINK_1 的回复:

SELECT *
FROM 
(SELECT *,ROW_NUMBER() OVER (PARTITION BY USER.ID ORDER BY task.createtime)  AS SEQ
FROM task 
inner join plan ON task.id = plan.taskid
inner join user ON plan.userid = user.id
WHERE LEVEL=1
AND USER.ID=1) AS A
WHERE SEQ=1
感谢回复!
MUGOER 2019-09-18
  • 打赏
  • 举报
回复
引用 1 楼 文盲老顾 的回复:
min(createtime),max(createtime) count,sum,min,max,avg了解下?
感谢回复!
二月十六 2019-09-18
  • 打赏
  • 举报
回复
SELECT *
FROM ( SELECT plan.ID,taskid,userid,state,plan.createtime AS pcreatetime,task.ID AS tid,type,level,url,task.createtime,user.ID AS uid,username,password,usernick
,ROW_NUMBER() OVER (PARTITION BY plan.userid ORDER BY task.createtime) rn
FROM task
INNER JOIN plan
ON task.ID = plan.taskid
INNER JOIN user
ON plan.userid = user.ID
WHERE task.level = 1) t
WHERE rn = 1;

RINK_1 2019-09-18
  • 打赏
  • 举报
回复

SELECT *
FROM 
(SELECT *,ROW_NUMBER() OVER (PARTITION BY USER.ID ORDER BY task.createtime)  AS SEQ
FROM task 
inner join plan ON task.id = plan.taskid
inner join user ON plan.userid = user.id
WHERE LEVEL=1
AND USER.ID=1) AS A
WHERE SEQ=1
文盲老顾 2019-09-18
  • 打赏
  • 举报
回复
min(createtime),max(createtime) count,sum,min,max,avg了解下?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧