powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Составить правильно запрос
7 сообщений из 7, страница 1 из 1
Составить правильно запрос
    #39191870
GenVick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток! В организации в которой я работаю есть электронная очередь компании ДАМАСК. Сервер всё хранит в БД Access. Там есть такая таблица process формат такой: ДатаВремя(2015-05-01 10:52:15) , номерБилета(20150501_00001), событие(число), и прочие не имеющие отношение к вопросу.

Выглядит примерно так:
"2015-05-01 10:52:15" "20150501_00001" "14" ...
"2015-05-01 11:08:34" "20150501_00001" "2" ...

Событие 14 это начало обслуживания, событие 2 это конец обслуживания
Задача состоит в том чтобы ЗАПРОСОМ подсчитать число билетов, обслуживание которых заняло меньше 15 минут
Ну или хотя-бы вывести в виде таблицы:
номер_билета начало обслуживания конец обслуживания

Спасибо за помощь.
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39191890
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GenVick,

Попробуйте так:
Код: sql
1.
2.
3.
4.
5.
SELECT S1.номерБилета, S1.ДатаВремя AS Начало, S2.ДатаВремя AS Конец
FROM (SELECT * FROM Таблица1 WHERE событие = 14) AS S1 INNER JOIN (SELECT * FROM Таблица1 WHERE событие = 2) AS S2
    ON S1.номерБилета = S2.номерБилета
WHERE DATEDIFF("N", S1.ДатаВремя, S2.ДатаВремя) <= 15
ORDER BY S1.ДатаВремя;



P.S. Не проверил, могут быть опечатки, исправьте сами. Само собой разумеется вместо "Таблица1" реальное название таблицы.
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39191892
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GenVickЗадача состоит в том чтобы ЗАПРОСОМ подсчитать число билетов, обслуживание которых заняло меньше 15 минут
Предполагая, что одному билету соответствует только по одной записи с началом и концом обслуживания
Код: sql
1.
2.
3.
4.
select -sum(datediff("n",q14.ДатаВремя, q2.ДатаВремя)<15) as [Кол_Обслуживание меньше 15 минут] 
(select номерБилета, ДатаВремя from process where событие=14) q14,
(select номерБилета, ДатаВремя from process where событие=2) q2,
q14 inner join q2 on q14.номерБилета=q2.номерБилета
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39191903
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT COUNT([DISTINCT] t1.номерБилета) AS Количество
FROM table AS t1, table AS t2
WHERE t1.номерБилета=t2.номерБилета
  AND t1.событие=14
  AND t2.событие=2
  AND DATEDIFF("N",t1.ДатаВремя, t2.ДатаВремя)<15
GROUP BY t1.номерБилета
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39191905
GenVick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,
Спасибо. То , что надо.
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39191915
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GenVickподсчитать число билетов
GenVickТо , что надо.
...
Рейтинг: 0 / 0
Составить правильно запрос
    #39192186
GenVickСоставить правильно запрос
В данной задаче использование
DateDiff("n", начало_обслуживания, конец_обслуживания)<15
будет приводить к неточности результатов запроса. Например,
Код: vbnet
1.
2.
3.
4.
начало_обслуживания=#05/01/2015 10:40:59#
конец_обслуживания=#05/01/2015 10:55:00#
?DateDiff("n",начало_обслуживания,конец_обслуживания)
  15


хотя интервал времени между начало_обслуживания и конец_обслуживания составляет 14 мин 01 сек.

Поэтому здесь нужно использовать или
DateDiff("s", начало_обслуживания, конец_обслуживания)<900
или
DateAdd("n", 15, начало_обслуживания)>конец_обслуживания
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Составить правильно запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]