выберите первую и последнюю запись каждой группы по горизонтали - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица, подобная enter image description here

Я хочу выбрать первую и последнюю запись каждой группы с помощью Facility_id, а затем по горизонтали и в порядке сгенерированными сгенерированными сгенерированными_индикатами нужно выводить как.я могу сделать это вертикально, но нужно горизонтально enter image description here

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, что это намного проще, используя оконные функции и select distinct:

select distinct facility_id, name,
       first_value(value) over (partition by facility_id, name order by created_at asc) as first_value,
       min(created_at) as first_created_at,
       first_value(value) over (partition by facility_id, name order by created_at desc) as last_value,
       max(created_at) as last_created_at
from t;

Нет подзапросов.Нет объединений.

Вы также можете использовать массивы для выполнения тех же функций, используя group by.Жаль, что SQL Server напрямую не поддерживает first_value() как оконную функцию.

0 голосов
/ 07 июня 2018
with CTE as (
  select 
  *
  ,ROW_NUMBER() over (partition by facility_id,name order by created_at asc ) ascrnk
  ,ROW_NUMBER() over (partition by facility_id,name order by created_at desc ) desrnk
  from TestTable
)
select T1.facility_id,T1.name,
  T1.value as "First_value",
  T1.created_at as "First created_at",
  T2.value as "Last_value",
  T2.created_at as "Last created_at"  
from (
  select * from cte
  where ascrnk = 1
) T1
left join (
  select * from cte
  where desrnk = 1 
) T2 on T1.facility_id = T2.facility_id and T1.name = T2.name

Результат:

| facility_id | name | First_value |     First created_at | Last_value |      Last created_at |
|-------------|------|-------------|----------------------|------------|----------------------|
|        2011 |    A |         200 | 2015-05-30T11:50:17Z |        300 | 2017-05-30T11:50:17Z |
|        2012 |    B |         124 | 2015-05-30T11:50:17Z |        195 | 2017-05-30T11:50:17Z |
|        2013 |    C |         231 | 2015-05-30T11:50:17Z |        275 | 2017-06-30T11:50:17Z |
|        2014 |    D |         279 | 2017-06-30T11:50:17Z |        263 | 2018-06-30T11:50:17Z |

Демонстрационная ссылка SQL Fiddle

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