[英]How to select rows with same values in one column but all must be different between each other in another column
[英]How to use 2 different condition substitute for each other in the same SELECT
我有這個問題現在,我有這張桌子
代碼 | 第一沒有 | 最后沒有 | 日期輸入 |
---|---|---|---|
ABC1234 | 12 | 34 | 2022/06/06 |
ABCD5678 | 56 | 78 | 2022/07/07 |
ABCD9111 | 91 | 11 | 2022/07/07 |
DEF1234 | 12 | 34 | 2022/06/06 |
DEF5678 | 56 | 78 | 2022/07/07 |
然后,我想返回 2 個隨機數(這 2 個數字是從 00 到 99),這將從前端獲取。 讓我們稱它們為 Random1 和 Random2。 現在,當查詢運行時,它將從記錄 1 運行 --> 最終
如果每當FirstNo = Random1,那么下一條記錄將采用FirstNo = Random2的條件。 然后,在下一條記錄時,它會返回得到FirstNo = Random1的條件。
比如Random1 = 56,Random2 = 91,上表如上
第一條記錄:FirstNo != 56,移動到下一行。
第二條記錄:FirstNo = 56。
第三條記錄:(因為在上一條記錄中,FirstNo 等於 Random1 (56),所以這條記錄會得到 Random2)FirstNo = 91。
第四條記錄:回到Random1,......
所以,我正在想辦法:
SELECT * FROM CODE_DEX WHERE FirstNo = @Random1
SELECT * FROM CODE_DEX WHERE FirstNo = @Random2
我不知道如何加入這兩個。我可以創建一個列 ISTRUE 或其他東西來在 SQL 中聲明和設置,但我認為我不能在 sql 查詢中間使用 IF。
太感謝了
根據規定的要求
如果按日期排序的 FirstNo 的前一行值為 Random1,則為 FirstNo 返回 random2
你會在 SQL 中這樣做
SELECT Code,
CASE WHEN LAG(FirstNo,1) OVER (ORDER BY Date_Input) = Random1
THEN Random2
ELSE FirstNo END AS FirstNo,
LastNo,
Date_input
FROM sometableyoudidnotname
ORDER BY Date_input
您可以選擇:
然后過濾掉所有連續行中沒有“ Random1 ”和“ Random2 ”值的行:
SET @Random1 = 56;
SET @Random2 = 91;
WITH cte AS (
SELECT *,
LAG(FirstNo) OVER(ORDER BY Code, Date_input) AS PrevNo,
LEAD(FirstNo) OVER(ORDER BY Code, Date_input) AS NextNo
FROM tab
)
SELECT Code,
FirstNo,
LastNo,
Date_input
FROM cte
WHERE (FirstNo = @Random1 AND NextNo = @Random2)
OR (FirstNo = @Random2 AND PrevNo = @Random1)
在此處查看演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.