在两个不同的条件下插入到表中 SQL



我想按时间差对表的条目进行排序(所以end_g - start_g(。但是,有可能没有结束时间(仍在进行中(。下面是我编写的代码,用于尝试插入条件;如果有结束,则取开始时间和结束时间之间的差异,否则取 currtime(( 和开始时间之间的差异。由此,我想从"艺术家"中选择此排序后时间最长的名称。

SELECT * FROM artists WHERE name = (SELECT group FROM members WHERE end IS NOT NULL ORDER BY DATEDIFF (millisecond, end_g, start_g) OR end IS NULL ORDER BY DATEDIFF(millisecond, GETDATE(), start_g) AND ROWNUM = 1); 

目前错误说我的括号不平衡,但我怀疑这是我构造第一个 SELECT 语句的方式。有什么建议吗?

不需要按内部子查询排序,我更喜欢in而不是=

 SELECT * FROM artists 
 WHERE name in (SELECT group FROM members WHERE "end" IS NOT NULL  AND ROWNUM = 1); 

由于结尾是保留词,因此使用豆豆引用

似乎您有错误的右括号缺少内部行数 = 1

SELECT * 
FROM artists 
WHERE name = (
    SELECT group 
    FROM members 
    WHERE end IS NOT NULL 
    AND ROWNUM = 1
    ORDER BY DATEDIFF(millisecond, end_g, start_g)
    ) 
    OR end IS NULL 

最新更新