我想按时间差对表的条目进行排序(所以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