У меня есть запрос (SQL Server 2012), который объединяет метки времени UNIX из двух разных таблиц в один столбец, что само по себе работает нормально. Запрос должен быть отсортирован (по убыванию) по объединенному столбцу даты И преобразован в читаемый формат.
Если я попытаюсь выполнить сортировку после конвертации даты, она не будет работать, поскольку теперь она является VARCHAR и возвращает:
05/02/2018
06/01/2017
07/03/2016
Сначала я попытался включить преобразование даты в предложение ORDER BY, но это явно не работает.
Тогда я подумал, что мог бы использовать подзапрос для выполнения сортировки, а затем выполнить преобразование в основном запросе (см. Ниже то, что у меня сейчас есть), но это возвращает ошибку:
Неправильное использование опции NEXT в операторе FETCH.
Я не использую оператор извлечения, поэтому мне интересно, есть ли в моем вложении что-то, что SQL Server не нравится.
Любые подсказки будут потрясающими.
-- Convert Epoch timestamp format to readable (and unsortable) dd/MM/yyyy format
SELECT CONVERT(VARCHAR(10), DATEADD(second, OuterTable.thedate-DATEDIFF(second, GETDATE(), GETUTCDATE()), CONVERT(DATETIME, '1970-01-01', 103)), 103) AS FinalDate
FROM (
-- Subquery only exists to do a proper date sort
SELECT thedate
FROM
(
SELECT
-- Determine which date to use
CASE WHEN x.dateX IS NOT NULL
THEN x.dateX
ELSE y.dateY
END AS thedate
-- Get date from first table
FROM (
SELECT id, dateX -- date is in Epoch format (BIGINT)
FROM tableX
) AS x
-- Get date from second table
JOIN (
SELECT id, dateY -- date is in Epoch format (BIGINT)
FROM tableY
) AS y
ON x.id = y.id
)
-- Perform sort while date is still in epoch format
ORDER BY thedate DESC
) AS OuterTable