SQL-запрос с суммированными статистическими данными, сгруппированными по дате - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь решить проблему с выполнением запроса для статистического обзора системы.Таблица, из которой я хочу получить данные, называется «Событие» и содержит следующие столбцы (среди прочего, публикуется только необходимое):

  • дата (как отметка времени)
  • positionId (как число)
  • eventType (как строка)

Другая таблица, которая, скорее всего, необходимаis 'Location', содержит, среди прочего, следующие столбцы:

  • id (как число)
  • клиника (каклогическое значение)

То, что я хочу, это сумма событий в различных условиях, сгруппированных по дням.Пользователь может вводить данные в диапазоне требуемых дней, что означает, что выходные данные должны отображать только строку в день в указанных пределах.Столбцы должны быть следующими:

  • дата: дата, группировка данных по дням
  • deliverySum: сумма записейдля данного дня, где eventType - это «sightingDelivered», а в расположении с id = posiitonId имеется клиника = true
  • pickupSum: То же, что deliverySum, но eventType - «sightingPickup»
  • rejectedSum: Сумма по событиям за день, где positionId равен 4000
  • acceptSum: То же, что и rejectedSum, но positionId равно 3000

Итак, в одной строке должны отображаться суммы за данный день по различным критериям.

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

Буду признателен за любую помощь

1 Ответ

0 голосов
/ 27 января 2019

SQL Server не имеет ни меток времени, ни логических значений, поэтому я отвечу на это для MySQL.

select date(date),
       sum( e.eventtype = 'sightingDelivered' and l.clinic) as deliverySum,
       sum( e.eventtype = 'sightingPickup' and l.clinic) as pickupSum,
       sum( e.position_id = 4000 ) as rejectedSum,
       sum( e.position_id = 3000 ) as acceptedSum
from event e left join
     location l
     on e.position_id = l.id
where date >= $date1 and date < $date2 + interval 1 day
group by date(date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...