UNION ALL - ЗАКАЗАТЬ ПО, сортировка

Я получаю записи из 3 таблиц:

(
    SELECT
        f.id AS id,
        'Faktura VAT' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue
    FROM Invoice_vat f
)
UNION ALL
(
    SELECT
        f.id AS id,
        'Faktura korygująca' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue
    FROM Invoice_fks f
)
UNION ALL
(
    SELECT
        f.id AS id,
        'Faktura proforma' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue
    FROM Invoice_pro f
)
ORDER BY date_issue DESC

Я пытаюсь отсортировать все это с помощью поля "date_issue", но это не работает... Есть идеи?

2 ответа

Решение

Это сортировка по "date_issue". Проблема в том, что в паршивом формате день месяца первый. Итак, список может начинаться с 1 января, но 1 февраля - до 2 января. Я бы исправил это, используя канонический формат YYYY-MM-DD, стандартный формат ISO для дат.

Вы также можете легко исправить это, включив исходный столбец в вывод:

(
    SELECT
        f.id AS id,
        'Faktura VAT' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue,
        f.date_issue as orig_date_issue
    FROM Invoice_vat f
)
UNION ALL
(
    SELECT
        f.id AS id,
        'Faktura korygująca' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue,
        f.date_issue as orig_date_issue
    FROM Invoice_fks f
)
UNION ALL
(
    SELECT
        f.id AS id,
        'Faktura proforma' as type,
        DATE_FORMAT(f.date_issue, '%d.%m.%Y') AS date_issue,
        f.date_issue as orig_date_issue
    FROM Invoice_pro f
)
ORDER BY orig_date_issue DESC;

Вы можете использовать подзапрос, если вы на самом деле не хотите выбирать поле.

Вы сортируете по измененной версии date_issue, поэтому он будет сортироваться как строка, а не как дата.

Попробуйте выполнить форматирование для последней даты, а не для каждой Union:

Select  ID, 
        Type, 
        DATE_FORMAT(date_issue, '%d.%m.%Y') As Date_Issue
From
(
    (
        SELECT
            f.id AS id,
            'Faktura VAT' as type,
            f.date_issue
        FROM Invoice_vat f
    )
    UNION ALL
    (
        SELECT
            f.id AS id,
            'Faktura korygująca' as type,
            f.date_issue
        FROM Invoice_fks f
    )
    UNION ALL
    (
        SELECT
            f.id AS id,
            'Faktura proforma' as type,
            f.date_issue
        FROM Invoice_pro f
    )
) A
ORDER BY A.date_issue DESC
Другие вопросы по тегам