[英]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.