Sql 按最大日期和id分组
我有下表:Sql 按最大日期和id分组,sql,sql-server,select,time,group-by,Sql,Sql Server,Select,Time,Group By,我有下表: id value date --------- --------- ---------- 1 324 2017-05-19 02:00:00 2 564 2017-05-19 04:00:00 3 675 2017-05-19 03:00:00 3 642 2017-05-19 05:00:00
id value date
--------- --------- ----------
1 324 2017-05-19 02:00:00
2 564 2017-05-19 04:00:00
3 675 2017-05-19 03:00:00
3 642 2017-05-19 05:00:00
4 642 2017-05-19 07:00:00
5 642 2017-05-19 06:00:00
6 642 2017-05-19 05:00:00
6 642 2017-05-19 12:00:00
7 642 2017-05-19 01:00:00
8 642 2017-05-19 13:00:00
8 642 2017-05-19 02:00:00
我想按id
列对进行分组,但在按date
降序排序时,还要从第一行选择value
和date
列,其中id
结果应该是这样的:
id value date
--------- --------- ----------
1 324 2017-05-19 02:00:00
2 564 2017-05-19 04:00:00
3 642 2017-05-19 05:00:00
4 642 2017-05-19 07:00:00
5 642 2017-05-19 06:00:00
6 642 2017-05-19 12:00:00
7 642 2017-05-19 01:00:00
8 642 2017-05-19 13:00:00
试试这个
select id, value, date
from name_table
group by id, value, date
select id, value, max(date)
from table_name
group by id,value;
试试这个
select id, value, date
from name_table
group by id, value, date
select id, value, max(date)
from table_name
group by id,value;
试试这个
select id, value, date
from name_table
group by id, value, date
select id, value, max(date)
from table_name
group by id,value;
试试这个
select id, value, date
from name_table
group by id, value, date
select id, value, max(date)
from table_name
group by id,value;
像这样的方法应该会奏效:
SELECT t1.id, t1.value, t1.date
FROM your_table t1
INNER JOIN (
SELECT id, MAX(date) date
FROM your_table
GROUP BY id
) t2
ON t1.id = t2.id AND t1.date = t2.date
像这样的方法应该会奏效:
SELECT t1.id, t1.value, t1.date
FROM your_table t1
INNER JOIN (
SELECT id, MAX(date) date
FROM your_table
GROUP BY id
) t2
ON t1.id = t2.id AND t1.date = t2.date
请尝试此查询
SELECT t1.id,value,t1.date FROM new_table t1
JOIN
(SELECT nt.id,max(nt.date) AS date FROM new_table as nt group by nt.id ) AS t2
ON t1.date = t2.date AND t1.id = t2.id;
它会起作用的
如果有任何疑问,请询问。尝试此查询
SELECT t1.id,value,t1.date FROM new_table t1
JOIN
(SELECT nt.id,max(nt.date) AS date FROM new_table as nt group by nt.id ) AS t2
ON t1.date = t2.date AND t1.id = t2.id;
;With cte( id, value ,date)
AS
(
SELECT 1, 324,'2017-05-19 02:00:00' Union all
SELECT 2, 564,'2017-05-19 04:00:00' Union all
SELECT 3, 675,'2017-05-19 03:00:00' Union all
SELECT 3, 642,'2017-05-19 05:00:00' Union all
SELECT 4, 642,'2017-05-19 07:00:00' Union all
SELECT 5, 642,'2017-05-19 06:00:00' Union all
SELECT 6, 642,'2017-05-19 05:00:00' Union all
SELECT 6, 642,'2017-05-19 12:00:00' Union all
SELECT 7, 642,'2017-05-19 01:00:00' Union all
SELECT 8, 642,'2017-05-19 13:00:00' Union all
SELECT 8, 642,'2017-05-19 02:00:00'
)
SELECT id
,value
,DATE
FROM (
SELECT *
,ROW_NUMBER() OVER (
PARTITION BY id ORDER BY id
) RNO
FROM (
SELECT id
,value
,MAX([date]) OVER (
PARTITION BY id ORDER BY id DESC
) AS [date]
,ROW_NUMBER() OVER (
PARTITION BY DATE ORDER BY id
) seq
FROM cte
) ddt
) Final
WHERE Final.RNO = 1
ORDER BY Final.RNO
它会起作用的
询问是否有任何疑问
;With cte( id, value ,date)
AS
(
SELECT 1, 324,'2017-05-19 02:00:00' Union all
SELECT 2, 564,'2017-05-19 04:00:00' Union all
SELECT 3, 675,'2017-05-19 03:00:00' Union all
SELECT 3, 642,'2017-05-19 05:00:00' Union all
SELECT 4, 642,'2017-05-19 07:00:00' Union all
SELECT 5, 642,'2017-05-19 06:00:00' Union all
SELECT 6, 642,'2017-05-19 05:00:00' Union all
SELECT 6, 642,'2017-05-19 12:00:00' Union all
SELECT 7, 642,'2017-05-19 01:00:00' Union all
SELECT 8, 642,'2017-05-19 13:00:00' Union all
SELECT 8, 642,'2017-05-19 02:00:00'
)
SELECT id
,value
,DATE
FROM (
SELECT *
,ROW_NUMBER() OVER (
PARTITION BY id ORDER BY id
) RNO
FROM (
SELECT id
,value
,MAX([date]) OVER (
PARTITION BY id ORDER BY id DESC
) AS [date]
,ROW_NUMBER() OVER (
PARTITION BY DATE ORDER BY id
) seq
FROM cte
) ddt
) Final
WHERE Final.RNO = 1
ORDER BY Final.RNO
输出
id value DATE
---------------------------
1 324 2017-05-19 02:00:00
2 564 2017-05-19 04:00:00
3 642 2017-05-19 05:00:00
4 642 2017-05-19 07:00:00
5 642 2017-05-19 06:00:00
6 642 2017-05-19 12:00:00
7 642 2017-05-19 01:00:00
8 642 2017-05-19 13:00:00
输出
id value DATE
---------------------------
1 324 2017-05-19 02:00:00
2 564 2017-05-19 04:00:00
3 642 2017-05-19 05:00:00
4 642 2017-05-19 07:00:00
5 642 2017-05-19 06:00:00
6 642 2017-05-19 12:00:00
7 642 2017-05-19 01:00:00
8 642 2017-05-19 13:00:00
结果是和startOk一样的表,我看不到不同的日期。正确的是从name\u表组中按id、value选择id、value、max(date)
结果与startOk相同,我看不到不同的日期。正确的是,从name\u table group by id中选择id、value、max(date),value
将返回id=3的两行,但只返回一行。将返回id=3的两行,但只返回一行。如果一个id有两个具有相同max time但“value”不同的RIW,则预期结果如何?您想要两行吗?DBMS:MSSQL,我需要一行用于一个idSQL服务器,然后您可以使用窗口函数!哪一行,如果一个id有日期限制?如果一个id有两个RIW,最大时间相同,但“值”不同,那么预期结果是什么?您想要两行吗?DBMS:MSSQL,我需要一行用于一个idSQL服务器,然后您可以使用窗口函数!哪一排,如果有身份证的约会领带?@Aleks很乐意帮忙:-)Aleks很乐意帮忙:-)Сббб102,бб15,бб1,бб30,ббббб15,我听不懂你的语言Сбб102,б15,我听不懂你的语言