从 SQL 服务器获取特定的不同列

Fetch specific distinct columns from SQL Server

我有 2 个表:

Table答:

ID | Date      | Uploaded Date
---+-----------+--------------
16 | 05/01/2020| 05/05/2020 12:36 PM
18 | 05/01/2020| 05/05/2020 12:20 PM

Table乙:

ID | Value | Amount  | A_ID
---+-------+---------+-----
1  | 3     | 76.295  | 16
2  | 2     | 93.465  | 16
3  | 5     | 82.396  | 16
4  | 8     | 62.2736 | 16
5  | 9     | 50.71   | 16
6  | 3     | 75.869  | 18
7  | 2     | 93.465  | 18
8  | 5     | 82.396  | 18
9  | 8     | 62.2736 | 18
10 | 9     | 50.71   | 18

我正在尝试编写一个 select 语句,它根据条件获取唯一数据。

我要查找的是基于值列的唯一记录。 FYR - 低于输出:

Date       | Amount  | Value
---+-------+---------+------
05/01/2020 | 76.295  | 3
05/01/2020 | 93.465  | 2
05/01/2020 | 82.396  | 5
05/01/2020 | 62.2736 | 8
05/01/2020 | 50.71   | 9

以下是我尝试过的几个查询:

select Date, Amount, Value
from A
left join B on A.ID = B.A_ID  order by Uploaded Date desc

执行上述查询后,我得到以下数据:

Date       | Amount  | Value
---+-------+---------+------
05/01/2020 | 76.295  | 3
05/01/2020 | 93.465  | 2
05/01/2020 | 82.396  | 5
05/01/2020 | 62.2736 | 8
05/01/2020 | 50.71   | 9
05/01/2020 | 75.869  | 3
05/01/2020 | 93.465  | 2
05/01/2020 | 82.396  | 5
05/01/2020 | 62.2736 | 8
05/01/2020 | 50.71   | 9

我试过distinct查询:

select distinct Date, Amount, Value
from A
left join B on a.ID = b.A_ID order by uploaded date desc

但它仍然 return 我重复数据:

Date       | Amount  | Value
---+-------+---------+------
05/01/2020 | 76.295  | 3
05/01/2020 | 93.465  | 2
05/01/2020 | 82.396  | 5
05/01/2020 | 62.2736 | 8
05/01/2020 | 50.71   | 9
05/01/2020 | 75.869  | 3

Table 有多个记录。

ID | Date      | Uploaded Date
---+-----------+--------------
16 | 05/01/2020| 05/05/2020 12:36 PM
18 | 05/01/2020| 05/05/2020 12:20 PM
19 | 05/02/2020| 05/05/2020 12:43 PM
20 | 05/03/2020| 06/05/2020 11:57 AM
21 | 05/04/2020| 06/05/2020 11:57 AM
ID | Value | Amount  | A_ID
---+-------+---------+-----
1  | 3     | 76.295  | 16
2  | 2     | 93.465  | 16
3  | 3     | 82.396  | 16
4  | 8     | 62.2736 | 16
5  | 3     | 50.71   | 19
6  | 3     | 50.51   | 20
7  | 4     | 52.71   | 21
8  | 4     | 55.11   | 20

在这种情况下,我希望 o/p :

Date       | Amount  | Value
---+-------+---------+------
05/01/2020 | 76.295  | 3
05/01/2020 | 93.465  | 2
05/01/2020 | 62.2736 | 8
05/02/2020 | 50.71   | 3
05/03/2020 | 50.51   | 3
05/03/2020 | 55.11   | 4
05/04/2020 | 52.71   | 4

如果我理解您的要求是正确的,那么您只需要列值中具有相同值的所有行中的第一行(基于 ID)。如果正确,您可以使用 ROW_NUMBER 来实现您的要求,如下所示-

DEMO HERE

SELECT ID,Value,Amount,A_ID 
FROM 
(
    SELECT *,
    ROW_NUMBER() OVER(PARTITION BY Value ORDER BY ID) RN
    FROM Table_B
)A
WHERE RN = 1
ORDER BY ID

现在您可以将输出与您的 Table_A 结合起来以选择其他必要的数据。

如果您有多个日期并且您需要保留每个日期的第一个记录,row_number 生成将如下所示。查询的其他部分将与现在一样。

ROW_NUMBER() OVER(PARTITION BY CAST(Date AS Date),Value ORDER BY ID) RN