2016-12-20 6 views
2

リクエスト 私は以下のデータセクションを持っています。私の目標は、一意の値のみを含む唯一の値で、変更されました。最新の日付までにDISTINCTを使用しているSQL集約

基礎としてこの回答https://stackoverflow.com/a/29912858/461887を使用しようと

modified agent rank 2016-10-18 346502 0 2013-06-04 346502 41 2011-10-31 346503 0 2012-08-13 346505 0 2016-04-18 346506 66 2015-01-27 346506 1 2016-01-21 346507 103 2015-01-27 346507 130 2012-01-30 346508 0 

データ

既存のが、それを適切に集約する場所を取得することはできません。

SQLが

SELECT DISTINCT 
    FLiex.agtprof.modify_date_time 
    ,FLiex.agtprof.agent_id 
    ,FLiex.agtprof.rank 
    ,FLiex.agtprof.external_id 
WHERE 
    FLiex.agtprof.modify_date_time = MAX(FLiex.agtprof.modify_date_time) 
FROM 
    FLiex.agtprof 

所望の出力

modify agent rank 
18/10/2016 346502 0 
18/04/2016 346506 66 
21/01/2016 346507 103 
13/08/2012 346505 0 
30/01/2012 346508 0 
31/10/2011 346503 0 

答えて

4

を動作していないあなたは、単一の行データを取得しようとするが、他の行に基づいています。これは集約関数で可能であるかもしれないが、それは窓(分析)機能をどうするはるかに簡単です:

SELECT [modified], [agent], [rank], [id] 
FROM (SELECT [modified], [agent], [rank], [id], 
       ROW_NUMBER() OVER (PARTITION BY [agent] 
            ORDER BY [modified] DESC) AS rn 
     FROM [agtprof]) t 
WHERE rn = 1 
+0

は、しかし、これは私が仕事に[テーブル])Tから秒を得ることができなかった最適なソリューションを探します。無効なオブジェクト名を返します。私はそれについてもっと学ぶ必要があるときにあなたに投票しました。また、私が働いている@Laughing Vergilから投票しました。 – sayth

+0

SELECT [FLiex.agtprof.modify_date_time]、[、FLiex.agtprof.agent_id]、[、FLiex.agtprof 。、FLiex.agtprof.rank]、[、FLiex.agtprof.external_id] FROM(SELECT [FLiex.agtprof.modify_date_time]、[、FLiex.agtprof.agent_id]、[、FLiex.agtprof.rank] 、 ROW_NUMBER()OVER([FLiex.agtprof.modify_date_time] DESC BY PARTITION BY [FLiex.agtprof.agent_id] ORDER)AS RN [FLiex.agtprof])T WHERE RN = 1〜 – sayth

1
SELECT DISTINCT max(id_date), agent, rank, id 
FROM fliex.agtprof 
GROUP BY 2,3,4; 

はこれを試してみてください。私はあなたが最大id_dateを選択し、残りの部分をグループ化すれば、あなたが探している結果を得るべきだと思います。

1

これを試してみてください:

SELECT 
    FLiex.agtprof.modify_date_time 
    ,FLiex.agtprof.agent_id 
    ,FLiex.agtprof.rank 
    ,FLiex.agtprof.external_id 
FROM 
    FLiex.agtprof 
INNER JOIN (
    SELECT 
     Max(FLiex.agtprof.modify_date_time) as max_mod_date_time 
     ,FLiex.agtprof.agent_id as agent_id 
    FROM 
     FLiex.agtprof 
    GROUP BY FLiex.agtprof.agent_id 
    ) Filter 
    ON FLiex.agtprof.agentID = Filter.agent_id 
    AND FLiex.agtprof.modify_date_time = Filter.max_mod_date_time 
関連する問題