我需要一些帮助来构建数据库查询的SQL命令。该数据库有5列:
Date(string)
Name(string)
number(int)
每个日期,名称和数字可以有多个条目。
我想为每个日期和名称组合仅选择一行。问题是这些实例有多个。对于每个日期和名称组合,我想选择编号最高的那个。我想按日期订购。例如:
date | name | number
1/1/1 henry 500
1/1/1 henry 2000
1/1/1 jacob 5
1/1/1 jacob 8
1/2/1 henry 6
该命令将返回:
1/1/1 henry 2000
1/1/1 jacob 8
1/2/1 henry 6
我一直在搞乱一些命令,但我很丢失。这甚至可能吗?
答案 0 :(得分:2)
您可以使用ROW_NUMBER
:
WITH cte
AS (SELECT date,
name,
number,
rn = Row_number ()
OVER(
partition BY date, name
ORDER BY number DESC)
FROM dbo.tablename)
SELECT date,
name,
number
FROM CTE
WHERE rn = 1
ORDER BY date ASC
ROW_NUMBER
将始终为每个组选择一条记录。如果要获取给定名称的最大编号的所有行(如果有多个),请改用DENSE_RANK
。
答案 1 :(得分:0)
尝试按日期和名称分组,然后选择最大数量。像这样(确切的语法可能因您的sql版本而异):
select
date,
name,
max(number)
from
yourtable
group by
date,
name
order by
date asc
答案 2 :(得分:0)
SELECT date, name, MAX(number)
FROM Table1
GROUP BY date, name
ORDER date, name