2016-05-24 8 views
0

私はSQLの初心者で、行を1行に減らす方法を見つけようとしており、基準は最新の "Encounter Date"です。私はこれを実現するために実行できるSQLクエリのタイプに最新の日付に限定された行を選択する

Measure_ID Name User Encounter Date Numerator 
    NQF-0101  A  1   4/11/2015   1 
    NQF-0101  B  2   4/13/2015   0 
    NQF-0101  C  3   4/16/2015   1 

任意の考え:これに

Measure_ID Name User Encounter Date Numerator 
    NQF-0101  A  1   4/10/2015  0 
    NQF-0101  A  1   4/11/2015  1 
    NQF-0101  B  2   4/12/2015  1 
    NQF-0101  B  2   4/13/2015  0 
    NQF-0101  C  3   4/14/2015  1 
    NQF-0101  C  3   4/15/2015  1 
    NQF-0101  C  3   4/16/2015  1 

:私はこれから行きたいですか?ありがとうございました!

+1

あなたはどのようなDBMSを使用していますか? –

+0

SELECT * FROM table_name GROUP BY名前ORDER BY encounter_date? – Alfie

+0

私は実際にTableauでカスタムSQLを使用しています。他のdbmsに似ているかどうかはわかりません。 – Josh

答えて

0

と仮定UserEncounter Date

Select t.* 
from MyTable t 
join (select User, max([Encounter Date]) as [Encounter Date] 
     from MyTable 
     group by User) q 
on q.User= t.User and q.[Encounter Date] = t.[Encounter Date] 

が動作するはずです、その後、ユニークです。あなたは、SQL Server、またはウィンドウ関数をサポートしている他のDBMSを使用している場合

1

、あなたはROW_NUMBER使用することができます。

SELECT t1.* 
FROM tbl t1 
INNER JOIN (
    SELECT 
     Measure_ID, User, MAX(EncounterDate) AS MaxDate 
    FROM tbl 
    GROUP BY Measure_ID, User 
) t2 
    ON t1.Measure_ID = t2.Measure_ID 
    AND t1.User = t2.User 
    AND t1.EncouterDate = t2.MaxDate 

WITH CTE AS(
    SELECT *, 
     rn = ROW_NUMBER() OVER(PARTITION BY Measure_ID, User ORDER BY EncounterDate DESC) 
    FROM tbl 
) 
SELECT * 
FROM CTE 
WHERE rn = 1 

がない場合は、あなたがMAX機能を使用することができます

0

ROW_NUMBER()関数を使用すると、名前列に基づいてグループ内のEncounter Date列で各行をランク付けできます。

OVER()句は、テーブルを名前列で区切り、各パーティション内の行をEncounter Dateで並べ替えます。

SELECT 
    measure_id 
    ,name 
    ,[user] 
    ,encounter_date 
    ,numerator 
FROM(
    SELECT 
    measure_id 
    ,name 
    ,[user] 
    ,encounter_date 
    ,numerator 
    ,ROW_NUMBER() OVER(PARTITION BY name ORDER BY encounter_date DESC) AS row_num 
    FROM test 
)q 
WHERE row_num = 1 

サブクエリを使用すると、最新の行以外のすべてを除外できます。ここで

はsqlfiddleでの作業の例です:http://sqlfiddle.com/#!6/ba10b/2

関連する問題