DESC в SQLite условный ORDER BY - PullRequest
       1

DESC в SQLite условный ORDER BY

3 голосов
/ 29 апреля 2011

Мне нужно выбрать записи, упорядоченные по следующей логике, однако SQLite вызывает ошибку, когда DESC находится в условном выражении.

ORDER BY
CASE 
  WHEN parentGUID IS NULL THEN datePosted DESC
  ELSE datePosted
END

Это для того, чтобы упорядочить Facebook, как упорядочивание = - оригинальные сообщения (которые всегда имеютnull parentGUIDs) в порядке убывания по дате и ответы на исходные сообщения, упорядоченные по дате возрастания.

Ответы [ 2 ]

5 голосов
/ 30 апреля 2011

Если я вас правильно понял, вам нужно присоединиться к таблице с датой родительского поста. Если это доступно, что-то вроде этого должно сделать:

DECLARE @X TABLE
(
ID  INT NOT NULL IDENTITY PRIMARY KEY,
parentID INT,
datePosted DATE NOT NULL
)
INSERT INTO @X (parentID, datePosted) VALUES
    (NULL, '2010-01-01'),
    (NULL, '2010-01-02'),
    (1,    '2010-01-03'),
    (1,    '2010-01-04'),
    (1,    '2010-01-05'),
    (2,    '2010-01-06')

SELECT
    Post.parentID, Post.datePosted
FROM @X AS Post
    LEFT JOIN @X AS Parent ON Post.parentID = Parent.ID
ORDER BY
    -- Order by post date, or rather the parent's post date if one exists
    COALESCE(Parent.datePosted, Post.datePosted)
    -- Order by reply date
    Post.datePosted

Это дает такой вывод:

parentID datePosted
-------- ----------
NULL     2010-01-02
2        2010-01-06
NULL     2010-01-01
1        2010-01-03
1        2010-01-04
1        2010-01-05

Обратите внимание, что это прервется, если ответы могут иметь ответы по очереди; вам нужно что-то более надежное. В MS SQL я бы использовал CTE, но я не очень знаком с Sqlite.

1 голос
/ 29 апреля 2011

С твоей коррекцией, я думаю, теперь я понимаю. Вот некоторые примеры данных

|GUID|parentGUID|datePosted|
+----+----------+----------+
|1   |null      |2010-01-01|
|2   |null      |2010-01-02|
|3   |1         |2010-01-03|
|4   |1         |2010-01-04|
|5   |1         |2010-01-05|
|6   |2         |2010-01-06|

И я предполагаю, что вы хотите этот вывод:

|GUID|parentGUID|datePosted|
+----+----------+----------+
|1   |null      |2010-01-01|
|5   |1         |2010-01-05|
|4   |1         |2010-01-04|
|3   |1         |2010-01-03|
|2   |null      |2010-01-02|
|6   |2         |2010-01-06|

Это довольно сложно (и, вероятно, медленно), чтобы заказать в одном запросе

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