获取SQL Server中范围的最大日期值

时间:2017-06-02 15:05:13

标签: 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:好的,我觉得很愚蠢。我的实际查询是不正确地连接两个表。一旦我修复了,我就能得到正确的数据。谢谢您的帮助。

3 个答案:

答案 0 :(得分:-1)

您使用的是什么查询?

对于此问题,假设您的日期列的数据类型为日期或字符串,此查询将起作用。

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

另外,检查是否有任何其他列导致任何冲突。

答案 1 :(得分:-1)

如果您的Date类型为Datetime(我已对其进行测试)

,则此方法有效
SELECT [Name], MAX(cast([Date] as date)) AS 'Date'
FROM "Your table name"
GROUP BY [Name]

答案 2 :(得分:-1)

因此,如果此列实际上是您所说的日期,那么您的原始查询实际上应该可以正常工作。您可能在表中有一行具有该值。为了确保运行这样的东西并筛选结果,看看你是否真的有一个'Joe'和'9/16/16'。

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