Как получить максимальную запись за сегодня (время) и максимальную запись за предыдущий день (время) - PullRequest
0 голосов
/ 28 июня 2009

Использование базы данных MS Access

Я хочу отобразить минимальную запись за сегодня (время) и максимальную запись за предыдущий день (время)

Таблица

PERSON ID  CARDEVENTDATE  CARDEVENTTIME
5008       20090805       080000
5008       20090805       140000
5008       20090809       180000
5008       20090809       220000
5008       20090813       090000
5008       20090813       200000
5008       20090818       110000
5008       20090818       232200
3405       20090805       080000
3405       20090805       180000
3405       20090809       070000
3405       20090809       230000
3010       20080806       090000
3010       20080806       230000
3010       20080810       100000
3010       20080810       160000

и так далее ...

Из приведенной выше таблицы я хочу отобразить Минуту за сегодня (время) и Макс (время) за предыдущий день

«Предыдущий день» означает не вчерашний день, а предыдущее время cardevent для конкретного человека.

Использую подзапросы.

Я использую нижеупомянутый запрос.

"SELECT PERSONID, CARDEVENTDATE, MIN (CARDEVENTTIME) AS INTIME, 
    MAX (CARDEVENTTIME) AS OUTTIME FROM (SELECT T_PERSON.PERSONID, 
    T_CARDEVENT.CARDEVENTDATE, T_CARDEVENT.CARDEVENTTIME 
FROM (T_TITLE INNER JOIN T_PERSON ON T_TITLE.TITLECODE = T_PERSON.TITLECODE)
    INNER JOIN T_CARDEVENT ON T_PERSON.PERSONID = T_CARDEVENT.PERSONID 
WHERE T_CARDEVENT.CARDEVENTDATE BETWEEN '" & sdate & "' AND '" & edate & "' 
ORDER BY T_PERSON.TITLECODE) GROUP BY PERSONID, CARDEVENTDATE))"

Но я не могу получить максимум за предыдущий день (время). Я хочу получить минимальное значение «Сегодня» (время) и максимальное значение «Время» за предыдущий день для идентификатора конкретного человека.

«Предыдущий день» означает не вчерашний день, а предыдущее автомобильное время для идентификатора конкретного человека.

Ожидаемый результат.

PERSON ID  CARDEVENTDATE  MIN TIME  CARDEVENTDATE  MAX TIME
5008       20090818       110000    20090813       200000
5008       20090813       090000    20090809       220000
5008       20090809       180000    20090805       140000
3405       20090809       070000    20090805       180000
3010       20080810       100000    20080806       230000

и так далее ...

Нужна помощь по запросу.

1 Ответ

1 голос
/ 28 июня 2009

Записать последний ответ.

Допустим, вы сохранили свой запрос как DAYMINMAX.
Вам нужно будет создать еще один запрос:

SELECT a.PERSONID  
     , MAX(b.CARDEVENTDATE) AS PREVDAY  
     , a.CARDEVENTDATE AS NEWDAY  
    FROM DAYMINMAX AS a INNER JOIN  
         DAYMINMAX AS b ON a.PERSONID = b.PERSONID  
                       AND a.CARDEVENTDATE > b.CARDEVENTDATE  
    GROUP BY a.PERSONID, a.CARDEVENTDATE  

Этот запрос дает вам одну дату и предыдущую дату на человека. Давайте назовем это DAYPREVNEW. Теперь вам понадобится еще один запрос (тот, который вы хотите):

SELECT a.PERSONID  
     , a.PREVDAY  
     , b.OUTTIME  
     , a.NEWDAY  
     , c.INTIME  
    FROM (DAYPREVNEW AS a INNER JOIN
         DAYMINMAX AS b ON a.PERSONID = b.PERSONID AND a.PREVDAY = b.CARDEVENTDATE) INNER JOIN DAYMINMAX AS c ON a.PERSONID = c.PERSONID AND a.NEWDAY = c.CARDEVENTDATE

Поскольку на исходный запрос ссылаются так много раз, чтобы создать необходимый ответ, лучше создать его как отдельный запрос, чем с использованием подзапросов.

...