フィルタリングされたレコードを表示するグリッドビューがあります。つまり、主キーにギャップがありますID
。
通常、フィルタは次の 3 つの列に適用されます。
dev_ID (nvarchar)
date
code_ID (nvarchar)
次のクエリでフィルタリングされないランダムな4番目の列。
グリッドビュー レコードを選択すると、
に戻ってDB
、選択した gridview レコードの前後の 10 個のレコードを取得したい
(この例では から始めることができPK
ます)。
これらのレコードはNOT
、主キーがシーケンシャルでID
あり、他の要因に基づいている可能性があります。
前に 10 レコード、または後に 10 レコードがない場合があります。
新しいクエリは、選択したレコードの前後の 10 個のレコードを返す必要があります。
ここで、dev_ID = @x、code_Id = @y、date = @someDate です。
現在:
2 つの個別のクエリで必要な結果を返すことはできますが、それらを 1 つの結果セットに結合することはできません。
( SELECT TOP 10
tblData.*
FROM tblData
WHERE pk <= 5481
AND dev_ID = 'REC1'
AND code_ID = 'FMU'
AND CAST(event_date_time AS DATE) = '10/18/2013'
ORDER BY pk DESC
)
UNION
( SELECT TOP 10
tblData.*
FROM tblData
WHERE pk >= 5481
AND dev_ID = 'REC1'
AND code_ID = 'FMU'
AND CAST(event_date_time AS DATE) = '10/18/2013'
ORDER BY pk ASC
)
この部分で本当に助けが必要です。ありがとう
アップデート:
私はこのアプローチに移行し、少し助けを借りることができました....
WITH NumberedMyTable AS
(
SELECT ROW_NUMBER() OVER (ORDER BY PK) AS RowNumber, *
FROM
tblData
WHERE dev_ID = 'REC1' AND code_ID = 'FMC' AND CAST(date_time as DATE) = '10/18/2013'
)
SELECT *
FROM
NumberedMyTable
WHERE
((**SELECT RowNumber FROM NumberedMyTable WHERE PK = 5481)** BETWEEN RowNumber + 10 AND RowNumber - 10)
これは現在、レコードを返していません。
どうすればクエリできますかRowNumber
WHERE
目的の範囲を返す句で使用するため、太字部分?
元の作業:
WITH recs
AS ( SELECT TOP 1
*
FROM tblData
WHERE pk = GDV_PK
ORDER BY pk
),
r AS ( SELECT TOP 10
tblData.*
FROM tblData
WHERE dev_ID = @x
AND code_ID = @y
ORDER BY PK DESC
)
SELECT TOP 10
*
FROM tblData
WHERE dev_ID = ( SELECT dev_ID
FROM r
)
AND CAST(date_time AS DATE) = @someDate
ORDER BY pk