Ближе, отлично. Тем не менее, Анкара 2, так как актуальны только последние 5 строк. Но это небольшое изменение.
Server я пытаюсь подсчитать количество дней с тех пор, как наблюдалась та же погода, что и сегодня (предположим, сегодня 6 августа 2018 года), впервые за последние 5 дней. В городе.
Вот данные:
+---------+---------+--------+--------+--------+
| Date | Toronto | Cairo | Zagreb | Ankara |
+---------+---------+--------+--------+--------+
| 1.08.18 | Rain | Sun | Clouds | Sun |
| 2.08.18 | Sun | Sun | Clouds | Sun |
| 3.08.18 | Rain | Sun | Clouds | Rain |
| 4.08.18 | Clouds | Sun | Clouds | Clouds |
| 5.08.18 | Rain | Clouds | Rain | Rain |
| 6.08.18 | Rain | Sun | Sun | Sun |
+---------+---------+--------+--------+--------+
Это должно хорошо работать, но все, что я до сих пор придумывал, - это отдельные запросы для каждого города (и будут десятки городов, а не только четыре). Это работает, но не в масштабе.
Вот тот, для Торонто ...
SELECT
DATEDIFF(DAY, MIN([Date]), GETDATE()) + 1
FROM
(SELECT TOP 5 *
FROM Weather
WHERE [Date] <= GETDATE()
ORDER BY [Date] DESC) a
WHERE
Toronto = (SELECT TOP 1 Toronto
FROM Weather
WHERE DataDate = GETDATE())
... который правильно возвращает 4, поскольку сегодня идет дождь, и первым дождем за последние 5 дней было 3 августа.
Но то, что я хочу вернуть, это таблица, подобная этой:
+---------+-------+--------+--------+
| Toronto | Cairo | Zagreb | Ankara |
+---------+-------+--------+--------+
| 4 | 5 | 1 | 5 |
+---------+-------+--------+--------+
Как это возможно?