Объедините несколько строк в одну с помощью Teradata

Я хочу добиться вывода одной строки из нескольких строк менее чем в 3 случаях с помощью Teradata SQL Assistant. Может ли кто-нибудь помочь мне создать общий запрос, который может обрабатывать все ниже 3 случая. Любая помощь высоко ценится.

Problem_statement

Дело 1:

Существующие данные

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
1   100217  0110527 Camera  1.0.02R22   My Camera 5 10/25/2015 17:56:09.000 10/29/2015 23:59:59.000
2   100217  0110527 Camera  1.0.02R22   Pool    10/30/2015 18:00:13.000 9/27/2016 23:59:59.000

Данные, которые я хочу

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT

1   100217  0110527 Camera  1.0.02R22   Pool    10/25/2015 17:56:09.000 9/27/2016 23:59:59.000

Корпус - 2:

Существующие данные

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
1   10006   0161969 Peripheral-router   V1.2.2.79   Network Peripheral  12/17/2014 23:12:32.000 7/8/2015 23:59:59.000
2   10006   0161969 Peripheral-router   V1.2.2.82   Network Peripheral  7/9/2015 21:34:39.000   2/16/2016 23:59:59.000
10006   0161969 Peripheral-router   V1.2.2.86   Network Peripheral  2/17/2016 16:27:12.000  8/17/2016 23:59:59.000

Данные, которые я хочу

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
10006   0161969 Peripheral-router   V1.2.2.86   Network Peripheral  12/17/2014 23:12:32.000 8/17/2016 23:59:59.000

Случай 3: где некоторые записи имеют начало устройства dt> конец устройства dt

Существующие данные

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
100526  84990534    Camera  3.0.02.54   Back Door   5/8/2019 15:55:30.000   6/2/2019 23:59:59.000
100526  84990534    Camera  3.0.02.54   Back Door   6/3/2019 22:31:06.000   6/25/2019 23:59:59.000
100526  84990534    Camera  3.0.02.54   Back Door   6/26/2019 15:52:57.000  7/19/2019 23:59:59.000
100526  84990534    Camera  3.0.02.54   Back Door   7/21/2019 03:40:11.000  7/20/2019 23:59:59.000
100526  84990534    Camera  3.0.02.54   Back    7/21/2019 13:03:56.000  10/23/2019 23:59:59.000

Данные, которые я хочу

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
100526  84990534    Camera  3.0.02.54   Back    5/8/2019 15:55:30.000   10/23/2019 23:59:59.000

Случай 4: где некоторые записи имеют начало устройства dt> конец устройства dt

Существующие данные

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/13/2017 12:24:42.000  8/20/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/21/2017 08:49:08.000  8/25/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/27/2017 02:42:46.000  8/26/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/28/2017 06:33:50.000  8/28/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/30/2017 02:35:32.000  8/31/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/2/2017 00:25:05.000   9/1/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/3/2017 03:33:28.000   9/3/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/4/2017 18:35:45.000   9/8/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/10/2017 11:22:54.000  10/16/2018 23:59:59.000

Данные, которые я хочу

ACCOUNT_ID  ACCOUNT_NUMBER  DEVICE_TYPE FIRMWARE_VERSION    LABEL   DEVICE_START_DT DEVICE_END_DT
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/13/2017 12:24:42.000  8/26/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/28/2017 06:33:50.000  8/28/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  8/30/2017 02:35:32.000  9/1/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/3/2017 03:33:28.000   9/8/2017 23:59:59.000
1000027 84957524    Peripheral-gateway  ?   Network Peripheral  9/10/2017 11:22:54.000  10/16/2018 23:59:59.000

Изменить:
Сценарий, которого я хочу достичь, выглядит следующим образом:

  1. Приведенные примеры представляют собой все записи истории (тип SCD - 2), все активные записи будут иметь конец устройства dt как «9999-12-31 00:00:00», как некоторые даты в будущем. Мы не будем рассматривать активные записи. Идея состоит в том, чтобы устранить дубликаты накопления для просроченных записей, мы не будем рассматривать firmware_version для рассмотрения дублирования. За исключением firmware_version, device_start_dt и device_end_dt, все остальные значения такие же.

  2. Мы будем рассматривать только записи с истекшим сроком действия и будем хранить минимум информации об истекших записях, поскольку объем данных велик.

Предположим, что у устройства есть 5 таких экземпляров, как показано ниже, с версией прошивки, датой начала устройства и датой окончания устройства соответственно, в идеальном случае дата начала устройства второго экземпляра = (дата окончания устройства экземпляра 1 + 1)

Экземпляр 1: V1.2.2.79 23.10.2012 26.11.2012 Экземпляр 2: V1.2.2.80 27.11.2012 28.11.2012 Экземпляр 3: V1.2.2.95 29.11.2012 07 23/23/2017 экземпляр 4: V1.2.2.98 24.07.2017 29.12.2018 экземпляр 5: V1.2.2.99 30/12/2018 09/02/2019

в приведенном выше примере мне нужен вывод, такой как последняя версия прошивки, дата начала устройства (самая ранняя или самая старая) и последняя дата, когда она истекла, как дата окончания устройства

вывод: V1.2.2.99 23.10.2012 02.09.2019


person Debasis Das    schedule 17.05.2020    source источник
comment
Вопрос непонятный. Пожалуйста, отредактируйте его и создайте минимальный входной набор данных и желаемый результат. Плюс добавьте, почему именно этого вы хотите достичь.   -  person Roee Anuar    schedule 17.05.2020
comment
Спасибо, Рое. Я подробно объяснил свой сценарий в разделе комментариев.   -  person Debasis Das    schedule 17.05.2020
comment
Данные вашего примера не похожи на SCD2, между предыдущим концом и текущим началом есть промежутки, а в некоторых случаях конец меньше начала. У вас есть даты или временные метки?   -  person dnoeth    schedule 17.05.2020
comment
Спасибо за ваш ответ. Несоответствий немного, так как меньшее количество записей было создано в часовом поясе GMT, где дата создания записи была меньше даты начала записи. Device_start_dt и device_end_dt - это временная метка, но вы можете рассматривать дату или временную метку, а не проблему.   -  person Debasis Das    schedule 17.05.2020
comment
В случае 4 мы рассматриваем записи с датой начала устройства ›(дата окончания устройства + 1) для создания одного экземпляра. В меньшем количестве случаев дата начала устройства больше, чем дата окончания устройства, в основном это записи с истекшим сроком действия в тот же день из-за ошибки часового пояса, но мы можем игнорировать их и выбрать любое значение, которое есть в таблице.   -  person Debasis Das    schedule 17.05.2020
comment
Добро пожаловать в Stack Overflow! Это сайт, на котором вы можете задавать вопросы и получать ответы о проблемах, возникающих с программным обеспечением, которым вы написали, но он не является моим домашним заданием за меня или выполняет свою работу за меня. Когда вы задаете вопрос, вы должны включать написанный вами код и конкретные ошибки, которые вы получаете, или результаты, которые дает ваша программа, а также объяснение ожидаемых результатов. Без этого мы действительно мало чем сможем вам помочь. Измените свой вопрос, чтобы показать, что вы сделали, и сообщить нам, какие проблемы есть у ВАШЕГО КОДА.   -  person Bob Jarvis - Reinstate Monica    schedule 17.05.2020


Ответы (1)


Выстрел в темноте. Кажется, вам нужны в основном данные из последней строки, только дата начала из первой строки:

select ACCOUNT_ID
  ,ACCOUNT_NUMBER
  ,DEVICE_TYPE
  ,FIRMWARE_VERSION
  ,LABEL
  ,first_value(DEVICE_START_DT) -- date from first row
   over (partition by ACCOUNT_ID, ACCOUNT_NUMBER, DEVICE_TYPE --??
         order by DEVICE_END_DT desc) 
  ,DEVICE_END_DT
from tab
qualify
   row_number()
   over (partition by ACCOUNT_ID, ACCOUNT_NUMBER, DEVICE_TYPE --??
         order by DEVICE_END_DT desc) = 1 -- latest row
person dnoeth    schedule 17.05.2020
comment
Большое спасибо за ваш ответ. Я подробно объяснил свой сценарий в разделе комментариев. - person Debasis Das; 17.05.2020