2017-10-25 11 views
0

特定の時刻までに特定の時刻までに記録されたデータをすべて記録する 'Cashup_Till'テーブルがあります。各会場には指定された番号 ' Till_No '。私はそれぞれの番号まで前の2日間のエントリーを取得する必要があります。それぞれが個別に耕しために私はSQL Get Top 2各列の値ごとの結果

SELECT TOP 2 T.* FROM CashUp_Till T 
WHERE T.Till_No = (Enter Till Number Here) 
ORDER BY T.Till_Id DESC 

いくつかの会場では、私は1回の呼び出しですべてのティルを行う必要があるので、理想的には20〜30のティルを持っている...これを行うことができます。私は数字までのユーザー定義のテーブル型を渡すことができますし、サブクエリでそれらを選択します。しかし、それは私のSQL知識が私を必要とする限り、誰にも解決策がありますか?

SELECT T.* 
FROM (SELECT T.*, 
      ROW_NUMBER() OVER (PARTITION BY Till_No ORDER BY Till_Id DESC) as seqnum 
     FROM CashUp_Till T 
    ) T 
WHERE seqnum <= 2; 

これは私が質問で提案されたと信じて一日あたり1つのレコードを、そこにあることを前提としています

+0

を? –

+0

@TimBiegeleisenここでは、単純な例として、会場/日の列は表示していません。where句に含めるSite_Day_Idがあります。 –

+0

前の2日間はどういう意味ですか? 1日に複数のレコードがありますか?最新の日にレコードがない場合はどうなりますか? –

答えて

1

は、ここに1つの方法です。

あなたは、ティルの別々のテーブルを持っている場合は、次の会場を表し、列

select ct.* 
from t cross apply 
    (select top 2 ct.* 
     from cashup_till ct 
     where ct.till_no = t.till_no 
     order by till_id desc 
    ) ct; 
+0

はい、あなたは1日あたり1つのエントリしかないと仮定するのは正しいです - 、ありがとう –

関連する問題