SQL按最新日期检索不同的数据

时间:2017-10-09 03:58:12

标签: sql sql-server greatest-n-per-group

我有一张表格如下:

Name    Customer   Date                     Amount
Joe       Aaron    2012-01-03 14:12:00.0      150
Joe       Aaron    2012-02-03 14:12:00.0      150
Joe       Danny    2012-03-03 14:12:00.0      150
Joe       Karen    2012-07-03 14:12:00.0      150
Ronald    Blake    2012-05-03 14:12:00.0      1501

我想通过指定Name来查询检索数据,如果Customer列有重复项,则最新Date的记录为

例如,如果我想查询Joe,我将得到以下结果:

Name    Customer   Date                     Amount
Joe       Aaron    2012-02-03 14:12:00.0      150
Joe       Danny    2012-03-03 14:12:00.0      150
Joe       Karen    2012-07-03 14:12:00.0      150

我该怎么做?试过distinct,但它不会那样工作。

修改 我使用的是SQL Server。对不起,我重新编辑了我的问题,这应该是我提出的正确问题。

3 个答案:

答案 0 :(得分:0)

你试过这个吗?

SELECT Name, Customer, MAX(Date) as CurrentDate, Amount 
FROM data 
Group By Name, Customer, Amount 
HAVING Name =  'Joe'

答案 1 :(得分:0)

一个选项:

SELECT * FROM Table WHERE (NAME, CUSTOMER, DATE) IN (SELECT NAME, CUSTOMER, MAX(DATE) WHERE NAME = 'Joe' GROUP BY NAME, CUSTOMER)

答案 2 :(得分:0)

另一个选择是使用WITH TIES子句与Row_Number()

一起使用

示例

Select top 1 with ties *
 From  YourTable
 Where Name='Joe'
 Order By Row_Number() over (Partition By Customer Order By Date Desc)

<强>返回

Name    Customer    Date                    Amount
Joe     Aaron       2012-02-03 14:12:00.000 150
Joe     Danny       2012-03-03 14:12:00.000 150
Joe     Karen       2012-07-03 14:12:00.000 150