2017-06-02 70 views
-2

假设我有这个表:拿在SQL Server的范围内最大的日期值

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 1/18/04 | 
| Joe  | 5/08/12 | 
| Joe  | 8/01/15 | 
| Joe  | 4/03/09 |  
| Katie  | 6/7/08 | 
| Katie  | 9/16/16 | 
| Katie  | 4/29/11 | 
| Katie  | 3/30/14 | 

我需要向下凝聚到这一点:

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 8/01/15 | 
| Katie  | 9/16/16 | 

(仅针对每个名称输入,以及最新的日期为每名)

我能得到的最接近的是通过使用GROUP BY NameMAX(Date),但返回类似这样的:

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 9/16/16 | 
| Katie  | 9/16/16 | 

有什么建议吗?

编辑:这是我的查询:

SELECT name, MAX(date) 
FROM table1 
GROUP BY Name 

编辑2:好了,我觉得愚蠢。我的实际查询是不正确地加入两个表。一旦我确定我能够获得正确的数据。谢谢您的帮助。

+5

显示您用来为两者获取'9/16/16'的确切查询。使用GROUP BY和MAX应该可行。 –

+0

日期列的数据类型是什么? –

+0

日期是日期时间 –

回答

-1

所以它看起来像你的原始查询应实际工作中如果此列,其实,日期如你所说。你可能在表格中有一行这个值。为了确保运行这样的东西,并筛选结果,看看你是否确实有'9/16/16'的'Joe'。

SELECT 
    name, 
    date, 
    ROW_NUMBER() OVER(PARTITION BY name ORDER BY date DESC) latestDate 
FROM 
    table1 
ORDER BY name,latestDate 

然后,如果你想找到最新的这种方式..而不是使用MAX()。我并不是说这是一种更好的方式......我只是给你提供另一种看待这种方式的方式。

WITH CTE_maxDates 
AS 
(
SELECT 
    name, 
    date, 
    ROW_NUMBER() OVER(PARTITION BY name ORDER BY date DESC) latestDate 
FROM 
    table1 
) 
SELECT * FROM CTE_maxDates 
WHERE latestDate = 1 
-1

您使用的是什么查询?

对于这个问题,这个查询可以工作,假设你的日期列是数据类型的日期或字符串。

Select Name, Max(Date) from Tablename group by Name. 

此外,检查是否有任何额外的列导致任何冲突。

-1

这工作,如果你的DateDatetime类型(我测试)

SELECT [Name], MAX(cast([Date] as date)) AS 'Date' 
FROM "Your table name" 
GROUP BY [Name]