1

これらの列を含むテーブルがあります (MS SQL-Server 2008);

市区町村日付

そして、このような行。

  • ポルト | ポルト | 1988.11.20
  • ポルト | ポルト | 19.11.1988
  • リスボン | 1988.11.21

私が欲しいのは、日付列 (降順) を並べ替えて、都市の個別の値を取得することです。したがって、結果は次のようになります。

  • リスボン
  • ポルト

私は試した;

select distinct(city) from TableCity order by cityDate desc

しかし、出力は次のとおりです。

Msg 145、Level 15、State 1、Line 1 SELECT DISTINCT が指定されている場合、ORDER BY アイテムは選択リストに表示される必要があります。

4

2 に答える 2

4

個別の代わりにgroupbyを使用する必要があります。

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

-結果:ポルトの市の日付が同じではないため、これでも3行が表示されますが、ポルトの市の日付が同じ場合は2行のみが表示されます。

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 に答える