Вставка в таблицу при двух разных условиях SQL - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу упорядочить записи в таблице по разнице во времени (поэтому end_g - start_g).Тем не менее, существует вероятность того, что нет конечного времени (все еще продолжается).Ниже приведен код, который я попытался вставить с условным условием;если есть конец, тогда возьмите разницу между временем начала и окончания, иначе возьмите разницу от currtime () и времени начала.Из этого я хочу выбрать имя из «Artist», которое имеет наибольшее время после сортировки.

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.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

, кажется, у вас неправильное закрытие парентезии, отсутствует внутренний rownum = 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 
0 голосов
/ 16 апреля 2019

нет необходимости заказывать внутри подзапроса, и я предпочитаю in, а не =

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

как конец является резервным словом, поэтому используйте двойную кавычку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...