Sql server 根据两列中的值筛选出重复行
我有下表:Sql server 根据两列中的值筛选出重复行,sql-server,distinct,Sql Server,Distinct,我有下表: CREATE TABLE [TABLE_1] ( ID decimal(28,6) NULL, S_DATE datetime NULL, NR decimal(28,6) NULL, ); INSERT INTO TABLE_1 (ID, S_DATE, NR) VALUES (1, '2020-01-01', 1), (1, '2020-01-01', 2), (1, '2020-05-02', 3); 一个简单的查询:
CREATE TABLE [TABLE_1]
(
ID decimal(28,6) NULL,
S_DATE datetime NULL,
NR decimal(28,6) NULL,
);
INSERT INTO TABLE_1 (ID, S_DATE, NR)
VALUES (1, '2020-01-01', 1),
(1, '2020-01-01', 2),
(1, '2020-05-02', 3);
一个简单的查询:
SELECT *
FROM Table_1 t1
返回:
+----+----------------------+----+
| ID | S_DATE | NR |
+----+----------------------+----+
| 1 | 2020-01-01T00:00:00Z | 1 |
| 1 | 2020-01-01T00:00:00Z | 2 |
| 1 | 2020-05-02T00:00:00Z | 3 |
+----+----------------------+----+
但我想过滤掉共享相同ID
和su日期的重复项,如下所示:
+----+----------------------+----+
| ID | S_DATE | NR |
+----+----------------------+----+
| 1 | 2020-01-01T00:00:00Z | 1 |
| 1 | 2020-05-02T00:00:00Z | 3 |
+----+----------------------+----+
SQL FIDLE:您可以使用一个公共表表达式,该表达式将行号应用于具有相同ID
/S_DATE
值的每个后续行,然后对该行号进行筛选
;WITH src AS
(
SELECT ID, S_DATE, NR, rn = ROW_NUMBER() OVER
(PARTITION BY ID, S_DATE ORDER BY NR)
FROM dbo.TABLE_1
)
SELECT ID, S_DATE, NR
FROM src
WHERE rn = 1;
您也可以这样做,这更简单,但当您有许多列要分组时(或者如果您希望包含更复杂的逻辑,其中包括NR
),这样做要复杂得多:
SELECT ID, S_DATE, NR = MIN(NR)
FROM dbo.TABLE_1
GROUP BY ID, S_DATE;