导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2019/1/11 9:04:55
标题:
加入我的收藏
楼主:
数据库结构: ID Time 2664060494 2019-01-08 10:00:00 2664060494 2019-01-08 11:00:00 2664060494 2019-01-09 09:00:00 2664060494 2019-01-09 08:00:00 5946315689 2019-01-08 12:00:00 5946315689 2019-01-08 14:00:00 5946315689 2019-01-10 15:00:00 5946315689 2019-01-10 13:00:00 取时间最大的行: 2664060494 2019-01-08 11:00:00 2664060494 2019-01-09 09:00:00 5946315689 2019-01-08 14:00:00 5946315689 2019-01-10 15:00:00 求这个SQL语句写法。 望数据库高手帮助。 谢谢。
----------------------------------------------
武汉天气不好
作者:
2019/1/11 9:12:22
1楼:
max(time),, group by id
----------------------------------------------
--
作者:
2019/1/11 9:46:23
2楼:
楼上正确
----------------------------------------------
-
作者:
2019/1/11 10:49:05
3楼:
--挺简单的吧。 --MSSQL2008R2 DECLARE @t TABLE (id VARCHAR(20),[time] SMALLDATETIME) INSERT @t ( id, [time] ) VALUES ('2664060494','2019-01-08 10:00:00'), ('2664060494','2019-01-08 11:00:00'), ('2664060494','2019-01-09 09:00:00'), ('2664060494','2019-01-09 08:00:00'), ('5946315689','2019-01-08 12:00:00'), ('5946315689','2019-01-08 14:00:00'), ('5946315689','2019-01-10 15:00:00'), ('5946315689','2019-01-10 13:00:00') SELECT ID,[TIME]=MAX([TIME]) FROM @t GROUP BY ID,CONVERT(VARCHAR(10),[TIME],121) ORDER BY ID
此帖子包含附件: 大小: 27.4K
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
2019/1/11 11:08:04
4楼:
时间为什么要用文本存呢?
----------------------------------------------
QQ群:325010556 欢迎加入。
作者:
2019/1/11 12:42:06
5楼:
时间是时间格式,不是文本。 在帖子里,只是随便造了几行数据。
----------------------------------------------
武汉天气不好
作者:
2019/1/11 12:43:43
6楼:
3楼,为什么把数据都放在查询里面。 数据是从表中获取的。我只是随便造了几行数据,便于理解。 用 Group by,其它字段就不能显示了。 表中不只两个字段。
----------------------------------------------
武汉天气不好
作者:
2019/1/11 19:28:25
7楼:
简单点就自关联。要有唯一key,别告诉我你的表没有主键。 效率高点就row_number()
----------------------------------------------
--
作者:
2019/1/12 10:00:52
9楼:
这个方法不能说最好,估计还行。 原则上,应该一句SQL是搞不定的。就算能搞定。使用SQL嵌套也不是什么明智的选择。 嵌套效率很低 MSSQL2008对SQL嵌套的支持不如 MSSQL2000。所以,用一个过程比较好。
此帖子包含附件: 大小: 48.0K
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
2019/1/12 10:44:23
10楼:
inbreak ,的确是数据库高手。 我对数据库了解甚少。也不会写存储过程。的确是想就用一行语句搞定。 没想到这么复杂。 谢谢谢谢!
----------------------------------------------
武汉天气不好
作者:
2019/1/14 17:33:26
11楼:
挺简单一事,写什么存储过程。 而且,嵌套查询也不会有多低效,低效就去查自己的表是怎么设计的。
----------------------------------------------
--
作者:
2019/1/17 15:26:02
12楼:
要学会自己查资料 先百度 "同组取最大"; 看到的简单SQL,可能实际执行报错。 那么其实你需要知道,mysql高版本,sqlserver,oracle 中分组统计时,select的可用字段是有限制的。你看到的简单 sql是基于早期mysql的(知识点1) 所以我们继续 百度 "同组取最大 sqlserver",看到的简单SQL, 就是那个自关联的,执行后基本能满足需要了。 但如果你多翻几篇,会看到bahamut8348 提到的row_number, 试用了以后你会发现这个也可以啊,那么和前面的区别呢, 如果有两条一样的数据符合要求,自关联会把两条都取出来, row_number就只会取一条,其实后面方法的重点是over。
----------------------------------------------
-
作者:
2019/1/17 15:29:36
13楼:
要了解over,row_number等可以继续百度,会看到开窗 ,对sql有兴趣的话,不妨深入了解这个。 综上,能直接提出row_number方法的bahamut8348应该水平会稍高点吧。
----------------------------------------------
-
作者:
2019/1/17 16:24:15
14楼:
select XX.ID,addtime(XX.A,XX.B) //将日期和时间合并成一个datetime字段,合并函数具体看后台数据库 from ( select ID,date(TIME) as A,max(time(TIME)) as B //按ID,TIME字段中的日期部分分组,找出TIME字段中最大的时间。date,time函数具体看后台数据库 from TableName group by ID,date(TIME) ) XX 这里例子用的是MySQL5.X。
----------------------------------------------
-