Как получить максимальный порядковый номер? - PullRequest
1 голос
/ 31 мая 2019

Это продолжение моего предыдущего поста: здесь

У меня есть этот запрос:

SELECT INVOICE_NUMBER, INVOICE_SEQ_NUMBER, FILE_NUMBER
FROM (SELECT A.INVOICE_NUMBER, A.INVOICE_SEQ_NUMBER, B.FILE_NUMBER,
             DENSE_RANK() OVER (ORDER BY A.INVOICE_NUMBER) as seqnum
      FROM TABLE1 A JOIN
           TABLE2 B 
           ON A.INVOICE_NUMBER = B.INVOICE_NUMBER AND 
              A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER
     ) t
WHERE seqnum <= 3;

И этот результат:

-----------------------------------------------------
| INVOICE_NUMBER | INVOICE_SEQ_NUMBER | FILE_NUMBER |
------------------------------------------------------
|1111111111-1    |          1         | P4324324525 |
-----------------------------------------------------
|1111111111-1    |          2         | P4565674574 |
-----------------------------------------------------
|1111111111-1    |          3         | V4324552557 |
-----------------------------------------------------
|1111111111-1    |          4         | V4324552525 |
-----------------------------------------------------
|2222222222-2    |          1         | S4563636574 |
-----------------------------------------------------
|3333333333-3    |          1         | Q4324325675 |
-----------------------------------------------------
|3333333333-3    |          2         | Q4565674574 |
-----------------------------------------------------

Итак, новое требование - как получить максимальный порядковый номер счета для одного и того же номера счета?Результат должен быть таким:

------------------------------------------------------------------------
| INVOICE_NUMBER | INVOICE_SEQ_NUMBER | FILE_NUMBER |MAX_INV_SEQ_NUMBER|
------------------------------------------------------------------------
|1111111111-1    |          1         | P4324324525 |        4         |
------------------------------------------------------------------------
|1111111111-1    |          2         | P4565674574 |        4         |
------------------------------------------------------------------------
|1111111111-1    |          3         | V4324552557 |        4         |
------------------------------------------------------------------------
|1111111111-1    |          4         | V4324552525 |        4         |
------------------------------------------------------------------------
|2222222222-2    |          1         | S4563636574 |        1         |
------------------------------------------------------------------------
|3333333333-3    |          1         | Q4324325675 |        2         |
------------------------------------------------------------------------
|3333333333-3    |          2         | Q4565674574 |        2         |
------------------------------------------------------------------------

Ответы [ 3 ]

1 голос
/ 31 мая 2019
SELECT INVOICE_NUMBER, INVOICE_SEQ_NUMBER, FILE_NUMBER, MAX(INVOICE_SEQ_NUMBER) OVER (PARTITION BY INVOICE_NUMBER)
FROM (SELECT A.INVOICE_NUMBER, A.INVOICE_SEQ_NUMBER, B.FILE_NUMBER,
             DENSE_RANK() OVER (ORDER BY A.INVOICE_NUMBER) as seqnum
      FROM TABLE1 A JOIN
           TABLE2 B 
           ON A.INVOICE_NUMBER = B.INVOICE_NUMBER AND 
              A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER
     ) t
WHERE seqnum <= 3;

По сути, вам просто нужно это в вашем операторе выбора:

MAX(INVOICE_SEQ_NUMBER) OVER (PARTITION BY INVOICE_NUMBER)
1 голос
/ 31 мая 2019

Добавьте следующее выражение в список select:
, max(INVOICE_SEQ_NUMBER) over (partition by INVOICE_NUMBER) as MAX_INV_SEQ_NUMBER.

0 голосов
/ 31 мая 2019

Добавить дополнительный столбец в выделенную часть, как показано ниже -

SELECT 
INVOICE_NUMBER, 
INVOICE_SEQ_NUMBER, 
FILE_NUMBER,
(
    SELECT COUNT(*) 
    FROM TABLE1 A 
    JOIN TABLE2 B 
    ON A.INVOICE_NUMBER = B.INVOICE_NUMBER 
    AND A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER
    AND A.INVOICE_NUMBER = t.INVOICE_NUMBER 
)MAX_INV_SEQ_NUMBER
FROM  ........
...