Как получить размер набора, первую и последнюю запись в упорядоченном наборе db2 одним вызовом - PullRequest
0 голосов
/ 02 апреля 2020

У меня очень большая таблица транзакций в DB2 v11, и мне нужно запросить ее часть как можно более эффективно. Все, что мне нужно, - это общее количество набора (заранее неизвестное, оно основано на критериях, скажем, за 1 день) и идентификатор первой записи и идентификатор последней записи. Старый код извлекал всю таблицу, затем просто использовал идентификатор 1-й записи, идентификатор и размер последней записи и не использовал остальные. Теперь этот код истекает. Это сложный запрос нескольких соединений. Есть ли способ просто получить размер набора, 1-й записи, последней записи - все в одном запросе выбора? Я читал, что переупорядочение списка для извлечения 1-й записи (так что извлекайте с помощью Des c, затем изменяйте на As c) неэффективно.

пример таблицы 1 TRANSACTION_RECORDS:

tdID     TIMESTAMP        name 
-------------------------------
123      2020-03-31       john 
234      2020-03-31       dan  
456      2020-03-01       Eve  
675      2020-04-01       joy  

пример таблицы 2 TRANSACTION_TYPE:

invoiceId   tdID      account
------------------------------
   897         123     abc  
   898         123     def  
   877         234     mnc  
   899         456     opp  

Пример запроса

 select Min(tr.transaction_id), Max(tr.transaction_id)
   from TRANSACTION_RECORDS TR
      join TRANSACTION_TYPE TT
        on TR.tdID=tt.tdID      
  WHERE Date(TR.TIMESTAMP) = '2020-03-31'       
  group by tr.tdID
  order by TR.tdID ASC

Это приводит к нескольким столбцам , (но для этого нужна группа)

 123,123  
 234,234  
 456,456  

Что я хочу, это:

 123,456  

1 Ответ

0 голосов
/ 02 апреля 2020

Как я уже упоминал в комментариях, для этого запроса вам не нужен Group BY и ни Order by, просто выполните:

select Min(tr.transaction_id), Max(tr.transaction_id)
   from TRANSACTION_RECORDS TR
      join TRANSACTION_TYPE TT
        on TR.tdID=tt.tdID      
  WHERE Date(TR.TIMESTAMP) = '2020-03-31' 

Он должен работать как положено

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