我正在尝试开发一个sql查询,它将返回一个序列号列表。设置该表时,只要序列号达到某个步骤,就会输入日期和时间。完成该步骤后,将输入另一个日期和时间。我想开发一个查询,该查询将给出已进入该步骤但未退出该步骤的序列号的列表。他们可能会多次输入,所以我只查找没有出口的序列号,然后输入。
例如(为方便使用,请将该表称为"Table1")
1. Serial | Step | Date
2. 1 | enter | 10/1
3. 1 | exit | 10/2
4. 1 | enter | 10/4
5. 2 | enter | 10/4
6. 3 | enter | 10/5
7. 3 | exit | 10/6对于上表,应检索序列号1和2,但不应检索序列号3。
这可以在带有子查询的单一查询中完成吗?
发布于 2009-02-02 16:26:11
select * from Table1
group by Step
having count(*) % 2 = 1这是指不能有两个“enter”,但每个enter后面都有一个“exit”(如所提供的示例所示)
发布于 2009-02-02 16:36:31
就我个人而言,我认为这最好是通过改变数据存储的方式来完成的。当前的方法不是有效的或有效的。是的,你可以胡乱摆弄,找到一种方法把数据弄出来。但是,如果有多个输入步骤,但同一serialNO没有退出,会发生什么情况呢?是的,它不应该发生,但迟早会发生,除非你编写了防止它的代码(编写起来会变得复杂的代码)。如果有一个表在同一条记录中同时存储进入和退出,这样会更干净。然后,查询(并且速度快得多)以查找那些已进入但未退出的内容就变得很简单。
发布于 2009-02-02 16:24:05
这将给你所有没有结尾“退出”的“回车”记录。如果您只需要序列号列表,则还应按序列号分组,并仅选择该列。
SELECT t1.*
FROM Table1 t1
LEFT JOIN Table1 t2 ON t2.Serial=t1.Serial
AND t2.Step='Exit' AND t2.[Date] >= t1.[Date]
WHERE t1.Step='Enter' AND t2.Serial IS NULLhttps://stackoverflow.com/questions/503781
复制相似问题