Подсчитать количество заказов за дату - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть такая таблица: ордера (id, creation_ts, status). Я хочу сгенерировать MySQL-запрос, который показывает количество открытых ордеров с помощью create_ts.create_ts - это временная метка MySQL

Пример данных:

id  created_ts status
--- ---------- -------
1   11-1-2017  Open
2   11-1-2017  Open
3   12-1-2017  Open
4   13-1-2017  Open
5   13-1-2017  Closed
6   14-1-2017  Closed

Outpur:

created_ts  count  
--------    ------  
11-1-2017   2  
12-1-2017   3  
13-1-2017   4  
14-1-2017   4  

Где count - количество ордеров, открытых на эту дату.
Эторассчитывается следующим образом.
количество заказов на дату = все заказы со статусом = 'Open' с созданным_тс <= созданным_тс этой строкой. </p>

Я не знаю, как решить проблему.Может кто-нибудь, пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

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

select t1.created_ts,
  (select count(*)
   from demo 
   where created_ts <=t1.created_ts 
   and status = 'Open') date_wise_sum
from (
  select distinct created_ts
  from demo 
) t1

Демо

0 голосов
/ 11 сентября 2018

Если я правильно понимаю, мы смотрим только на открытые записи и игнорируем закрытые записи. Вам нужна промежуточная сумма, которую вы получаете с помощью функции windows, доступной с MySQL 8:

select created_ts, sum(sum(status = 'Open')) over (order by created_ts) as cnt
from mytable
group by created_ts
order by created_ts;

В более ранних версиях, например, вы можете объединить счетные даты:

select dates.created_ts, sum(counted.cnt) as total
from
(
  select distinct created_ts 
  from mytable 
) dates
join 
(
  select created_ts, count(*) as cnt
  from mytable
  where status = 'Open'
  group by created_ts
) counted on counted.created_ts <= dates.created_ts
group by dates.created_ts
order by dates.created_ts;
0 голосов
/ 11 сентября 2018

Кажется, вам нужна совокупная сумма:

SELECT t.created_ts,
         (@running_total := @running_total + count(case when status='Open'then t.id else null end)) AS countval
    FROM TABLE t
    JOIN (SELECT @running_total := 0) r
group by t.created_ts
ORDER BY t.created_ts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...