MySQL Query для выбора последней записи для каждого из последних 7 дней - PullRequest
1 голос
/ 14 февраля 2012

Я пытаюсь найти запрос MySQL, чтобы выбрать последнюю запись из каждого из предыдущих 7 дней. Если в 1 из предыдущих 7 дней отсутствуют данные, я получу только 6 записей. Вот что у меня есть:

SELECT tracking.* FROM tracking
INNER JOIN 
    (SELECT MAX(lastChecked) AS maxLastChecked, id FROM tracking 
    WHERE lastChecked >= DATE_SUB(lastChecked, INTERVAL 7 DAY ) 
        GROUP BY DAY(lastChecked)) as Lookup ON Lookup.id = tracking.id
            WHERE tracking.propertyID = 1 ORDER BY tracking.lastChecked ASC LIMIT 7

По сути, это то, что нужно сделать, это выбрать последнюю записанную запись для propertyID = 1 в таблице отслеживания для каждого из последних 7 дней (начиная с сегодняшнего дня). Однако этот запрос возвращает это мне (больше чем ТОЛЬКО записей за последние 7 дней):

ID    propertyID  lastChecked              value
2     1           2012-01-25 05:30:00      280
1     1           2012-01-26 12:34:02      268
5     1           2012-01-27 09:51:31      268
83    1           2012-02-13 00:01:07      276

Любая помощь, чтобы исправить это будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 14 февраля 2012
WHERE lastChecked >= DATE_SUB(lastChecked, INTERVAL 7 DAY )

Это условие вашего кода будет выполняться для каждой записи, так как lastChecked всегда больше, чем lastChecked -7. Итак, если вам нужны данные за последние 7 дней, замените их на

WHERE lastChecked >= DATE_SUB(SYSDATE(), INTERVAL 7 DAY )
0 голосов
/ 14 февраля 2012

Попробуйте этот запрос:

SELECT tracking.* FROM tracking
INNER JOIN 
    (SELECT MAX(lastChecked) AS maxLastChecked, id FROM tracking 
    WHERE DATEDIFF(lastChecked,NOW())<=7
        GROUP BY DAY(lastChecked)) as Lookup ON Lookup.id = tracking.id
            WHERE tracking.propertyID = 1 ORDER BY tracking.lastChecked ASC
0 голосов
/ 14 февраля 2012

Я полагаю, у вас должна быть системная дата вместо "lastChecked" в этой части:

DATE_SUB(lastChecked, INTERVAL 7 DAY )

Должно быть:

DATE_SUB(SYSDATE(), INTERVAL 7 DAY )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...