2016-12-10 9 views
0

を設定取得する私は、このようなクエリを持っている:私の質問はどのようにあるSqliteを:どのように結果から毎日上位N個の結果が

TradeDate Ticker  Net_Sold 
20161205 388 HK -3174437.4380 
20161205 941 HK -3113297.9650 
20161205 358 HK -2373509.1600 
20161205 2318 HK -1456734.7500 
20161206 175 HK -1074980.3250 
20161206 1928 HK -882339.0880 
20161206 2388 HK -489695.4150 
20161206 941 HK -383618.2200 
20161207 1211 HK -341908.9750 
20161207 1766 HK -263330.6400 
20161207 2318 HK -226313.7380 
20161207 388 HK -206908.1000 

SELECT TradeDate, Ticker, SUM(Net_Sold) AS Net_Sold FROM report 
WHERE Issuer='ABC' AND TradeDate>='20161205' 
GROUP BY ticker, TradeDate ORDER BY TradeDate, Net_Sold ASC 

これは、以下の出力結果セットを返します。毎日のトップ2のデータを返すsqliteクエリを記述しますか?私はこのような出力を期待しています:

20161205 388 HK -3174437.4380 
20161205 941 HK -3113297.9650 
20161206 175 HK -1074980.3250 
20161206 1928 HK -882339.0880 
20161207 1211 HK -341908.9750 
20161207 1766 HK -263330.6400 

答えて

1

SQLiteはrow_number()または変数をサポートしています。代わりに、

WITH t AS (
     SELECT TradeDate, Ticker, SUM(Net_Sold) AS Net_Sold 
     FROM report 
     WHERE Issuer = 'ABC' AND TradeDate >= '20161205' 
     GROUP BY ticker, TradeDate 
     ORDER BY TradeDate, Net_Sold ASC 
    ) 
SELECT t.* 
FROM t 
WHERE (SELECT COUNT(*) 
     FROM t t2 
     WHERE t2.TradeDate = t.TradeDate AND 
      t2.Net_Sold >= t.NetSold 
    ) <= 2; 

をまたは::それはこれを処理する方法として、サブクエリを残し

WITH t AS (
     SELECT TradeDate, Ticker, SUM(Net_Sold) AS Net_Sold 
     FROM report 
     WHERE Issuer = 'ABC' AND TradeDate >= '20161205' 
     GROUP BY ticker, TradeDate 
     ORDER BY TradeDate, Net_Sold ASC 
    ) 
SELECT t.* 
FROM t 
WHERE t.ticker IN (SELECT t2.ticker 
        FROM t t2 
        WHERE t2.TradeDate = t.TradeDate 
        ORDER BY t2.NetSold DESC 
        LIMIT 2 
       ); 
+0

どうもありがとうございました!すべてうまくいく! –

関連する問題