2017-03-22 6 views
0

順にn個のトップの記録を取るために、私は取引を取得するには、次のクエリを使用していますが、私はこの結果について、各ユーザーどのようにクエリ

SELECT bt.FromID, bt.ToID, u.Username, bt.Amount, bt.ToOpeningBal, bt.ToClosingBal, bt.CreatedDate AS TransferDate, u.CreatedDate AS RETLCreatedDate 
FROM BalanceTransfer AS bt INNER JOIN Users AS u ON bt.ToID = u.ID 
WHERE u.CreatedDate BETWEEN '2017-01-04 00:00:14.1400000' AND '2017-01-10 00:00:14.1400000' 
AND (bt.ToOpeningbal = 0 or bt.ToOpeningbal = 200) 
ORDER BY bt.CreatedDate 



Username | Amount | ToOpeningBal| ToClosingBal | TransferDate 
----------|--------|----------------|----------------|---------------- 
ABC  | 2044 | 0   | 2044   | 2/18/17 11:00 AM 
ABC  | 2000 | 0   | 2000   | 2/18/17 11:28 AM 
ABC  | 5110 | 200   | 5310   | 2/20/17 4:52 PM 
ABC  | 3066 | 0   | 3066   | 2/18/17 12:48 PM 
ABC  | 3069 | 0   | 3069   | 2/21/17 7:38 PM 
XYZ  | 2050 | 0   | 2050   | 2/18/17 2:23 PM 
XYZ  | 2050 | 0   | 2050   | 2/18/17 3:00 PM 
XYZ  | 2044 | 0   | 2044   | 2/18/17 12:34 PM 
XYZ  | 5125 | 0   | 5125   | 2/18/17 8:39 PM 

のトップ2のレコードのみを必要とする私は必要なの各ユーザ名の2レコードをトップ

+0

あなたが使用しているDBMS? – jarlh

+0

MS SQL Server 2014 – Luqman

+3

google row_number()何か別の順序によるパーティション – Veljko89

答えて

1

SQL Serverを使用している場合は、使用してROW_NUMBERとフィルタを追加している:

SELECT * FROM (
SELECT 
    bt.FromID, 
    bt.ToID, 
    u.Username, 
    bt.Amount, 
    bt.ToOpeningBal, 
    bt.ToClosingBal, 
    bt.CreatedDate AS TransferDate, 
    u.CreatedDate AS RETLCreatedDate, 
    ROW_NUMBER() OVER(PARTITION BY u.Username ORDER BY bt.CreatedDate) rowNum 
FROM BalanceTransfer AS bt 
    INNER JOIN Users AS u ON bt.ToID = u.ID 
WHERE u.CreatedDate BETWEEN '2017-01-04 00:00:14.1400000' AND '2017-01-10 00:00:14.1400000' 
    AND (bt.ToOpeningbal = 0 or bt.ToOpeningbal = 200) 
ORDER BY bt.CreatedDate) a 
WHERE rowNum <=2 
関連する問題