1

我有一个包含这些列的表(MS SQL-Server 2008);

城市城市日期

和这样的行;

  • 波尔图 | 20.11.1988
  • 波尔图 | 19.11.1988
  • 里斯本 | 21.11.1988

我想要的是订购日期列(desc)并获得城市的不同值。所以结果应该是;

  • 里斯本
  • 波尔图

我试过;

select distinct(city) from TableCity order by cityDate desc

但输出是;

如果指定了 SELECT DISTINCT,则消息 145、级别 15、状态 1、行 1 ORDER BY 项必须出现在选择列表中。

4

2 回答 2

4

您只需要使用 group by 而不是 distinct:

假设 T 是您的表:

WITH T as
(
SELECT 'Porto' City,'20.11.1988' CityDate UNION ALL
SELECT 'Porto' City,'19.11.1988' CityDate UNION ALL
SELECT 'Lisbon' City,'21.11.1988' CityDate
)

--测试1:

select City,CityDate from T GROUP BY City,CityDate Order by CityDate DESC

--结果:这仍然显示三行,因为波尔图的城市日期不一样,但如果波尔图城市日期相同,它将只显示两行。

City    CityDate
Lisbon  21.11.1988
Porto   20.11.1988
Porto   19.11.1988

--测试2:

select T2.City 
FROM
(select City from T GROUP BY City,CityDate) as T2
GROUP BY T2.City

或者

您可以使用 CTE:

With T as
(
select City from YourTable GROUP BY City,CityDate
)  

select City FROM T group by City

- 结果:

City
Lisbon
Porto

问候

于 2012-05-31T23:23:18.803 回答
0

我正在手机上执行此操作,因此以下内容未经测试,但应该可以

SELECT T2.city
FROM ( SELECT city, MAX(cityDate) AS maxDate
                   FROM T
                 GROUP BY city
                 ORDER BY maxDate desc ) AS T2
于 2012-05-31T23:49:01.943 回答