SQL-код для получения следующей переменной в таблице с другим значением - PullRequest
0 голосов
/ 04 января 2019

Мне нужно найти способ в SQL Server 2014 Management Studios найти следующее уникальное значение в столбце, который разделяет значение другого столбца.

Так, например, ниже, я бы хотел, чтобы мои результаты были

Column 1 - A
Column 2 - 1
Column 3 - 4

Поскольку это первый раз, когда A имеет уникальные значения в столбце 2 и 3

 Column1 | Column2 | Column3
---------+---------+---------
|    A   |    X    |   1   |
|    A   |    X    |   2   |
|    B   |    Y    |   3   |
|    A   |    Z    |   4   |

Запрос:

SELECT 
    Column1,
    LEAD(Column3) OVER (PARTITION BY Column2 ORDER BY Column3) AS FindValue
FROM 
    Table

1 Ответ

0 голосов
/ 04 января 2019

Если я правильно понимаю, я бы попробовал что-то вроде этого:

-- first we find minimum values for column1, column2 variations
WITH min_values AS (
    SELECT 
        column1,
        column2,
        min(column3) AS min_value
    FROM 
        table
    GROUP BY 1,2
)
-- then we find bottom 2 values for column1
,bottom_2 AS (
    SELECT
        column1,
        min_value,
        row_number() OVER (PARTITION BY column1 ORDER BY min_value ASC) AS rn
    FROM
        min_values
)
-- THEN we JOIN results INTO single record
    SELECT 
        b1.column1, b2.min_value, b1.min_value
    FROM
        bottom_2 b1
    JOIN
        bottom_2 b2 ON b1.column1 = b2.column1 AND b2.rn < b1.rn
    WHERE b1.rn <= 2

Я только что проверил комментарии выше и хотел бы добавить некоторые заметки.Если вы хотите найти следующее значение, упорядоченное по column2, вы должны изменить порядок с min_value на column2 в строке row_number ().В противном случае, если вы ищете следующее вставленное значение, вам нужна временная метка или какой-то идентификатор.

...