假设我有这张表:
| 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 Name
和MAX(Date)
,但返回的内容如下:
| Name | Date |
+-----------+-----------+
| Joe | 9/16/16 |
| Katie | 9/16/16 |
有什么建议吗?
编辑:这是我的问题:
SELECT name, MAX(date)
FROM table1
GROUP BY Name
编辑2:好的,我觉得很愚蠢。我的实际查询是不正确地连接两个表。一旦我修复了,我就能得到正确的数据。谢谢您的帮助。
答案 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