Сортировка в SQL Server по минимальной дате в двух столбцах

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для сортировки данных по минимуму из двух столбцов используйте функцию LEAST в выражении ORDER BY:

SQL
Скопировать код
SELECT * FROM ваша_таблица ORDER BY LEAST(кол1, кол2);

Замените ваша_таблица, кол1 и кол2 на соответствующие названия из вашей таблицы. Если вам требуется сортировка в обратном порядке, просто добавьте ключевое слово DESC:

SQL
Скопировать код
ORDER BY LEAST(кол1, кол2) DESC;
Кинга Идем в IT: пошаговый план для смены профессии

Что делать, если отсутствует LEAST? Это не проблема!

В SQL Server нет поддержки функции LEAST, однако можно использовать выражение CASE в качестве альтернативы:

SQL
Скопировать код
SELECT * 
FROM ваша_таблица 
ORDER BY CASE 
    WHEN кол1 < кол2 OR кол2 IS NULL THEN кол1 
    ELSE кол2 
END;

Обработка значений NULL при помощи ANSI Standard с помощью NULLOSAURUSrex

Значения NULL могут стать препятствием, но функция COALESCE соответствует стандарту ANSI SQL и позволяет эффективно их обработать:

SQL
Скопировать код
ORDER BY CASE 
    WHEN COALESCE(кол1, кол2) < COALESCE(кол2, кол1) THEN кол1 
    ELSE кол2 
END;

При работе с датами используйте стандартные значения, например, '1753-01-01':

SQL
Скопировать код
ORDER BY CASE
    WHEN COALESCE(Дата1, '1753-01-01') < COALESCE(Дата2, '1753-01-01')
    THEN Дата1
    ELSE Дата2
END;

Как легко обходить вложенные SELECT

В сложных запросах можно использовать вложенный SELECT для эффективной сортировки по минимальной дате:

SQL
Скопировать код
SELECT *, 
    (SELECT MIN(d) FROM (VALUES (Дата1), (Дата2)) AS a(d)) AS МинДата
FROM ваша_таблица
ORDER BY МинДата;

Рассчитывайте минимальное значение Datetime как профессионал

Для работы со столбцами datetime используйте комбинацию DATEDIFF и ABS:

SQL
Скопировать код
SELECT *, 
    ABS(DATEDIFF(day, '1753-01-01', COALESCE(Дата1, '1753-01-01'))) AS Разн1,
    ABS(DATEDIFF(day, '1753-01-01', COALESCE(Дата2, '1753-01-01'))) AS Разн2
FROM ваша_таблица
ORDER BY CASE
    WHEN Разн1 < Разн2 THEN Дата1
    ELSE Дата2
END;

Производительность SQL: необходимость в производительности

Нужна высокая производительность? Используйте выражения CASE и избегайте замедления своих запросов вложенными SELECT'ами.

Визуализация

Пример сортировки по минимальному значению двух столбцов:

Markdown
Скопировать код
| Бегун  | Испытание 1 | Испытание 2 | Лучшее время |
| ------- | ------------ | ------------ | --------- |
| 🏃‍♂️      |     5с      |     8с      |    5с     |
| 🏃‍♀️      |     7с      |     6с      |    6с     |

Сортируем бегунов по их лучшему времени:

plaintext
Скопировать код
🥇 Бегун 🏃‍♂️ (Лучшее время: **5с**)
🥈 Бегун 🏃‍♀️ (Лучшее время: **6с**)

В SQL это выглядит следующим образом:

plaintext
Скопировать код
🏆 Первое место: Запись с минимальным значением среди столбцов
🥈 Второе место: Запись со следующим минимальным значением

SQL – как участник гонки за минимальные значения!

Избегайте подводных камней

COALESCE поможет избежать проблем с NULL. Эта функция более универсальна, чем ISNULL, и поддерживается в большинстве SQL-систем.

Полезные материалы

  1. Ключевое слово SQL ORDER BY на W3Schools — понятное объяснение использования выражения ORDER BY.
  2. sql ORDER BY множество значений в определённом порядке? – Stack Overflow — множество примеров и рекомендаций по сортировке.
  3. PostgreSQL: Документация по условным выражениям — официальная документация PostgreSQL.
  4. Функция LEAST() в MySQL – GeeksforGeeks — подробное описание функции LEAST и её применения при сортировке.
  5. Oracle / PLSQL: Предложение ORDER BY — разъяснение применения предложения ORDER BY от Oracle.