У меня есть таблица с столбцом даты и значения. Таблица заполняется ежедневно новыми значениями. Порой население не имеет места. Мне нужно создать отчет о последних значениях в каждый прошлый понедельник. Этот запрос показывает, что данные не были собраны в 2013-02-18 годах.Запрос Mysql для последнего значения, когда дата отсутствует
mysql> выберите дату из таблицы, где dayfweek (date) = 2;
+------------+
| date |
+------------+
| 2013-02-04 |
| 2013-02-11 |
| 2013-02-25 |
| 2013-03-04 |
| 2013-03-11 |
| 2013-03-18 |
| 2013-03-25 |
+------------+
7 rows in set (0.00 sec)
Поэтому я хотел бы получить последнее предыдущее значение для этого понедельника. Я могу сделать это с < = макс (дата) отдельно, если я знаю, что недостающую дату, как это:
mysql> select max(date) from table where date <= "2013-02-18";
+------------+
| max(date) |
+------------+
| 2013-02-14 |
+------------+
1 row in set (0.00)
Это показывает, что последнее значение 2013-02-18 собирали на 2013-02-14. Поэтому мне нужен один запрос, который вернет то, что последнее значение было в каждый понедельник. И если для этого дня не существует значения, используйте последнее предыдущее существующее значение. Мой вывод должен выглядеть следующим образом:
+------------+
| date |
+------------|
| 2013-02-04 |
| 2013-02-11 |
| 2013-02-14 |
| 2013-02-25 |
| 2013-03-04 |
| 2013-03-11 |
| 2013-03-18 |
| 2013-03-25 |
+------------+
Заранее спасибо.
Спасибо за помощь. Но я не получил достаточной информации. Поскольку этот запрос возвращает 4858 строк. Данные обычно вводятся в таблицу ежедневно для нескольких именованных объектов. Вот ваш запрос для моей среды: – user2225048
mysql> SELECT date FROM temp t WHERE array like "arrayname" и dayofweek (date) = 2 ИЛИ EXISTS (SELECT max (DATE) FROM temp i WHERE array like "arranyname" и WEEK (t. дата) = НЕДЕЛЯ (i.date) И НЕ СУЩЕСТВУЕТ (SELECT 1 FROM temp WHERE array, как «arrayname» и WEEK (дата) = CASE КОГДА НЕДЕЛЯ (i.date) = 53 ТОГДА 0 ELSE WEEK (i.date) + 1 END = НЕДЕЛЯ (дата) И ГОД (дата) = ГОД (i.date) + CASE КОГДА НЕДЕЛЯ (i.date) = 53 ТОГДА 1 ELSE 0 END И dayfweek (дата) = 2)); – user2225048
Если вы не предоставляете полную информацию, мы не можем вам помочь – Akash