从 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 来实现您的要求,如下所示-
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
我有 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 来实现您的要求,如下所示-
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