[英]Return multiple records, but it should limit 1 record per each similar condition
[英]SQL Query : should return Single Record if Search Condition met, otherwise return Multiple Records
我有數十億條記錄的表,表結構如下:
ID NUMBER PRIMARY KEY,
MY_SEARCH_COLUMN NUMBER,
MY_SEARCH_COLUMN
數值最大為15位數字。
我想要的是,如果有任何特定的記錄匹配,我將只需要獲取該匹配的值,
即:如果我輸入WHERE MY_SEARCH_COLUMN = 123454321
並且表的值為123454321
則只應返回此值。
但是,如果精確值不匹配,我將不得不從表中獲取下一個10個值。
即:如果我輸入WHERE MY_SEARCH_COLUMN = 123454321
並且列沒有值123454321
則它應該從表中返回大於123454321
10個值
兩種情況都應在單個SQL Query中討論 ,我必須牢記查詢的性能 。 我已經在MY_SEARCH_COLUMN
列上創建了索引,因此歡迎其他建議來提高性能。
如果不使用proc或某些動態SQL,這可能很棘手,但是我們可以在此處嘗試使用ROW_NUMBER
:
WITH cte AS (
SELECT ID, MY_SEARCH_COLUMN,
ROW_NUMBER() OVER (ORDER BY MY_SEARCH_COLUMN) rn
FROM yourTable
WHERE MY_SEARCH_COLUMN >= 123454321
)
SELECT *
FROM cte
WHERE rn <= CASE WHEN EXISTS (SELECT 1 FROM yourTable WHERE MY_SEARCH_COLUMN = 123454321)
THEN 1
ELSE 10 END;
上面查詢的基本思想是,我們為與目標匹配或更高匹配的所有記錄分配一個行號。 然后,如果完全匹配,則使用行號1進行查詢,如果不匹配,則使用最多10的所有行號進行查詢。
SELECT * FROM your_table AS src WHERE src.MY_SEARCH_COLUMN =存在時的情況(從your_table AS src2 WITH 1(無鎖)src2.MY_SEARCH_COLUMN = 123456321中選擇1)然后123456321 ELSE src.MY_SEARCH_COLUMN結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.