Объединить два запроса SQL в один запрос - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица со структурой

TicketID - ID of the Ticket
CreateTime - Time when the ticket is created
FinishTime - Time when the ticket is finished handled

Моя цель - найти эти значения в часах

Number of Tickets Received per hour
Number of Tickets handled per hour

Пока я пришел с двумя отдельными запросами

Select count(Receipt.ID) as ReceiveCount,
       Receipt.hours as PST,
      (Receipt.hours+12.5) as IST 
from
      (Select ReceiptScanRequestTable.ReceiptScanRequestID as ID,
              from_unixtime(CreateTime/1000 , '%H') as hours 
       from 
              ReceiptScanRequestTable 
       where 
              CreateTime>{hour_filter_value}  
      ) as Receipt 
Group By 
      Receipt.hours

Это вернет Количество полученных билетов в час

Select count(Receipt.ID) as FinishCount,
           Receipt.hours as PST,
          (Receipt.hours+12.5) as IST 
    from
          (Select ReceiptScanRequestTable.ReceiptScanRequestID as ID,
                  from_unixtime(FinisheTime/1000 , '%H') as hours 
           from 
                  ReceiptScanRequestTable 
           where 
                  CreateTime>{hour_filter_value}  
          ) as Receipt 
    Group By 
          Receipt.hours

Это вернет Количество завершенных билетов в час

Моя цель - объединить два запроса в один!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете использовать union all и затем агрегировать:

select hours, sum(receive) as numreceived, sum(finish) as numfinished,
       (hours + 12.5) as IST 
from ((Select from_unixtime(CreateTime/1000 , '%H') as hours, 1 as receive, 0 as finish
       from ReceiptScanRequestTable 
       where CreateTime > {hour_filter_value}
      ) union all
      (Select from_unixtime(FinisheTime/1000 , '%H') as hours, 0, 1
       from ReceiptScanRequestTable 
       where CreateTime>{hour_filter_value}  
      )
     ) r
group by hours;
0 голосов
/ 09 мая 2018

Попробуйте это:

select receivecount, finishcount from (Select count(Receipt.ID) as ReceiveCount,
       Receipt.hours as PST,
      (Receipt.hours+12.5) as IST 
from
      (Select ReceiptScanRequestTable.ReceiptScanRequestID as ID,
              from_unixtime(CreateTime/1000 , '%H') as hours 
       from 
              ReceiptScanRequestTable 
       where 
              CreateTime>{hour_filter_value}  
      ) as Receipt 
Group By 
      Receipt.hours) a 
cross apply
(Select count(Receipt.ID) as FinishCount,
           Receipt.hours as PST,
          (Receipt.hours+12.5) as IST 
    from
          (Select ReceiptScanRequestTable.ReceiptScanRequestID as ID,
                  from_unixtime(FinisheTime/1000 , '%H') as hours 
           from 
                  ReceiptScanRequestTable 
           where 
                  CreateTime>{hour_filter_value}  
          ) as Receipt 
    Group By 
          Receipt.hours)b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...