05.03.2012 10:07
konst
 
Посоветуйте пожалуйста...
делаю отчет по чекам - хочу рабить сутки (рабочий день с 9:00 до 22:00) на временные интервалы - например на 10 или 15 минут
и посчитать за эти интервалы кол-во чеков и кол-во позиций в чеках, чтобы прибилзительно построить графиг загрузки касс...
как это сделать в SQL??
Этим запросом получаю спецификацию чеков + время в формате ЧЧ:ММ
Код:
SELECT   a.locid, a.desknum, a.znum, a.checknum,
         TO_CHAR (a.printtime, 'HH24:MI'), a.cashier, a.totalsum, a.opcode,
         b.item, b.article, b.quantity, b.itemprice, b.totalsum
    FROM supermag.smcashchecks a, supermag.smcashcheckitems b
   WHERE a.printtime BETWEEN TO_DATE ('01.03.2012', 'DD.MM.YYYY')
                         AND TO_DATE ('01.03.2012', 'DD.MM.YYYY') + 1
     AND a.locid = b.locid
     AND a.desknum = b.desknum
     AND a.znum = b.znum
     AND a.checknum = b.checknum
ORDER BY 5
как бы теперь это связать с интервалами?
05.03.2012 11:18
konst
 
В принципе необходимый результат получил... но смотрится как то кривовато...
может быть есть более красивое решение?

Код:
SELECT tinth||':'||case tt, qt from (
SELECT tinth,  case,  COUNT (cc) qt FROM (
SELECT tinth,
       CASE
          WHEN tintm >= 0 AND tintm < 15
             THEN '00-15'
          WHEN tintm >= 15 AND tintm < 30
             THEN '15-30'
          WHEN tintm >= 30 AND tintm < 45
             THEN '30-45'
          WHEN tintm >= 45 AND tintm < 60
             THEN '45-60'
       END CASE, cc 
  FROM (SELECT   TO_CHAR (a.printtime, 'HH24') tinth,
                 TO_CHAR (a.printtime, 'MI') tintm, 1 as cc
            FROM supermag.smcashchecks a
           WHERE a.printtime BETWEEN TO_DATE ('01.03.2012', 'DD.MM.YYYY')
                                 AND TO_DATE ('01.03.2012', 'DD.MM.YYYY') + 1
                     ORDER BY tinth, tintm)
          )GROUP BY tinth, case
          ORDER by 1, 2)
05.03.2012 12:12
konst
 
вдруг кому пригодится... вот что получилось:
Код:
SELECT   tt, COUNT (tt)
    FROM (SELECT   TRUNC (a.printtime, 'HH24')
                 + TRUNC (TO_CHAR (a.printtime, 'MI') / 15) / (4 * 24) tt
            FROM supermag.smcashchecks a
           WHERE a.printtime BETWEEN TO_DATE ('01.02.2012', 'DD.MM.YYYY')
                                 AND TO_DATE ('29.02.2012', 'DD.MM.YYYY') + 1)
GROUP BY tt
ORDER BY tt
19.08.2013 20:15
omnomnom
 
Интересно а как этот же отчет только по 3 или 4 часа собрать?
19.08.2013 20:19
Vlad_German
 
TO_CHAR (a.printtime, 'MI') / 15) минуты делятся на 15 поделите на свой интервал Или замените на 'HH'
Часовой пояс GMT +3, время: 13:12.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.