Sql Server Shift Отчет с 4 сменами - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть таблица SQL, в которой есть данные о потреблении электроэнергии. Существующие столбцы: Дата, Имя и Значение. Вот образец:

    DT                      Tag                           Value

2018-09-13 17:09:32.553 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 18:09:32.557 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 19:09:32.567 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 20:09:32.580 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 21:09:32.583 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 22:09:32.593 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-13 23:09:32.597 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 00:09:32.603 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 01:09:32.603 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 02:09:32.603 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 03:09:32.610 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 04:09:32.627 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 05:09:32.640 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 06:09:32.643 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 07:09:32.650 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 08:09:32.663 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 09:09:32.677 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 10:09:32.677 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 11:09:32.677 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125
2018-09-14 12:09:32.680 Siemens.MDBPLC.elDCS2.elDCS2p   30559.01953125

Значения вставляются в таблицу каждый час.

Мне нужно создать отчеты за смену, где мы можем видеть, какая смена потребляет энергию по среднему значению за смену часов. У нас 4 смены:

2019-09-13 07:00-19:00 A
2019-09-13 19:00-07:00 B
 2019-09-14 07:00-19:00 C
2019-09-14 19:00-07:00 D

В результате мне нужен вывод, подобный этому:

Date               Shift  Value
2019-09-13 07:00     A     30559.01953125
2019-09-13 19:00     B     30559.01953125
2019-09-14 07:00     C     30559.01953125

Они используют MS SQL 2012. Не могут изменить структуру или что-либо еще, только могут выбирать данные из БД.

Ответы [ 2 ]

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

Ниже я решил сформировать цикл из 4 смен, используя 2 оператора перекрестного применения, чтобы псевдонимы столбцов можно было использовать повторно, что, надеюсь, облегчит их чтение.

Использование datediff (hour, ...) и модуль от начальной точки 2018-01-01 07:00 мы можем выяснить, какие часы находятся в первой или второй смене, а затем второй расчет модуля говорит нам, какой из 2 дней имеет значение, вместе мы можем тогдасделать 4 сменных цикла, которые охватывают 2 дня.

select
     ca2.shift_start
   , ca2.shift
   , avg(value) avg_value
from table1
cross apply (
    select
           datediff(hour,'20180101 07:00', dt) % 24 hr
        , (datediff(hour,'20180101 07:00', dt) / 24) % 2 dy
    ) ca1
cross apply (
   select case
          when ca1.dy = 0 and ca1.hr between 0  and 11 then 'a'
          when ca1.dy = 0 and ca1.hr between 12 and 23 then 'b'
          when ca1.dy = 1 and ca1.hr between 0  and 11 then 'c'
          when ca1.dy = 1 and ca1.hr between 12 and 23 then 'd'
          end as shift
        , convert(varchar(13),dateadd(hour,-(case when hr < 12 then hr else hr-12 end),dt),121) shift_start
    ) ca2
group by
     ca2.shift_start
   , ca2.shift
order by
     ca2.shift_start
   , ca2.shift


+----+---------------+-------+----------------+
|    |  shift_start  | shift |   avg_value    |
+----+---------------+-------+----------------+
|  1 | 2018-09-13 07 | c     | 30559,01953125 |
|  2 | 2018-09-13 19 | d     | 30559,01953125 |
|  3 | 2018-09-14 07 | a     | 30559,01953125 |
+----+---------------+-------+----------------+

см .: http://rextester.com/VHQK56298

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

у вас есть таблица, которая определяет сдвиг?Здесь я предположил, что у вас есть один и диапазон дат, определенный в сменах, совпадающий с вашими выборочными данными (год 2018)

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