根据多种条件选择特定数据

时间:2013-03-18 22:02:28

标签: sql sql-server sql-server-2008 tsql sqlcommand

我需要一些帮助来构建数据库查询的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   

我一直在搞乱一些命令,但我很丢失。这甚至可能吗?

3 个答案:

答案 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

DEMO

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