У меня есть данные, показанные ниже:
ID_LIFTING | ITEM | DATE
---------------------
1101 | 6 | 2020-02-01
1101 | 6 | 2020-02-02
1101 | 6 | 2020-02-03
1101 | 7 | 2020-02-01
1101 | 7 | 2020-02-02
1101 | 7 | 2020-02-03
1102 | 6 | 2020-02-04
1102 | 6 | 2020-02-04
1102 | 7 | 2020-02-04
1102 | 7 | 2020-02-04
То, что я хочу, это , под аналогичными ID_DATA и ITEM , там будет быть одним столбцом, показывающим объединенный диапазон дат в виде строки ' MIN (дата) - MAX (дата) '. Но если при аналогичной ID_DATA дата похожа, она будет показывать только ДАТА без диапазона.
Обратите внимание, что может быть более 2 строк ДАТА для одного ID_DATA . Я надеюсь использовать case-when.
После ожидаемого результата :
ID_LIFTING | ITEM | DATE
---------------------
1101 | 6 | 2020-02-01 - 2020-02-03
1101 | 7 | 2020-02-01 - 2020-02-03
1102 | 6 | 2020-02-04
1102 | 7 | 2020-02-04
Ниже приведен мой запрос. Мой запрос все еще неправильный, я не понимаю, где поставить правильный запрос для моего ожидаемого результата :( (это для ALD_DATE ). Обратите внимание, что у меня есть много объединений ниже, чтобы получить нужные мне данные, как показано выше. ID_LIFTING есть после параметра таблицы D .
SELECT DISTINCT ...
)
,ALD_DATE = (SELECT CASE WHEN MIN(DATE) = MAX(DATE) THEN CAST(MIN(DATE) AS CHAR)
ELSE CONCAT(MIN(DATE), ' - ', MAX(DATE))
END AS DATE
FROM data
GROUP BY ID_LIFTING, ITEM
ORDER BY ID_LIFTING),
FROM MYTABLE A
LEFT JOIN ...;