1

私は次のデータを持っていますここに画像の説明を入力

私は結果が次のようになることを望みます:

ここに画像の説明を入力

アルバニアの場合、アルバニアの City_Code (ここでは 20008) の最後の値の日付の最小値と最大値を選択したいと思います (20008 年の日付の最小値は 18.01.2013 で、20008 の最大値は 20.01.2013 です)。 . クロアチアの場合、City_Code の最後の値は「ゼロ」であるため、何も選択しないでください (「City_Code」の最後の値がゼロの場合は、まったく選択しないでください)。スロベニアの場合、City_Code の最後の値は 70005 であるため、対応する日付の最小値と最大値を選択します (ここでは、最大値と最小値は 22.01.2013 です)。コードはどのように見えるべきですか? わかりません。前もって感謝します

4

3 に答える 3

1
SELECT Country,
       max(City_code),
       min(DATE),
       max(Date)
FROM T as T1
WHERE City_code = (SELECT TOP 1 City_Code 
                          FROM T WHERE T.Country=T1.Country 
                          ORDER BY Date DESC)
GROUP BY Country
HAVING max(City_Code)<>'0'
于 2013-11-11T13:51:50.973 に答える
0

これを試して:

With Cities
AS (
    select Country, City_Code, Min([Date]) Date1, Max([Date]) Date2, 
           ROW_NUMBER() OVER(PARTITION BY Country ORDER BY Country, City_Code DESC) Seq
    from MyCountryCityTable t
    group by t.Country, t.City_Code
)
Select
    Country,
    NULLIF(City_Code,0) City_Code,
    CASE WHEN City_Code = 0 THEN NULL ELSE Date1 END Date1,
    CASE WHEN City_Code = 0 THEN NULL ELSE Date2 END Date2
From Cities Where Seq = 1
Order by Country

編集:

共通テーブル式のないバージョン ( WITH):

Select
    Country,
    NULLIF(City_Code,0) City_Code,
    CASE WHEN City_Code = 0 THEN NULL ELSE Date1 END Date1,
    CASE WHEN City_Code = 0 THEN NULL ELSE Date2 END Date2
From (select Country, City_Code, Min([Date]) Date1, Max([Date]) Date2, 
           ROW_NUMBER() OVER(PARTITION BY Country ORDER BY Country, City_Code DESC) Seq
    from MyCountryCityTable t
    group by t.Country, t.City_Code) Cities 
Where Seq = 1
Order by Country
于 2013-11-11T13:50:37.343 に答える