Select 只有一条记录提供了完整的信息 and/or 其中的最低值 (SQL)
Select only one record where information is fully provided and/or the lowest value in it (SQL)
我有这样的情况。我需要使代码工作,以便它仅选择一个基于 PVLICP(车牌)的 PVISBN(项目编号)(我只需要从我返回的 2 中获取第一行)。
TableSeven AS (
SELECT PVISBN, PVWHS, PVLICP, PVRZNE, PVRLOC, PVAZNE, PVALOC, PVLPRG,
ROW_NUMBER() OVER (PARTITION BY PVISBN, PVRZNE ORDER BY PVLICP --, PVRLOC, PVAZNE, PVALOC, PVLPRG
ASC) AS rn
FROM [REPIT].[LEVYDTA].[WHSPDVT]
WHERE PVSPDT BETWEEN @Last2WeekDATE AND @LWDate
--AND PVISBN='0164556221'
) ,
TableTwelve AS (
SELECT PVISBN, PVWHS, PVLICP, PVRZNE, PVRLOC, PVAZNE, PVALOC, PVLPRG, rn
FROM TableSeven
WHERE rn = 1
),
I keep getting 2 rows and should get only the 1st one
如果有人有想法,我将不胜感激。
假设“最旧”和“最低”相同,您可以使用聚合:
SELECT PVISBN, MIN(PVLICP) as PVLICP
FROM yourtable
GROUP BY PVISBN;
对于您的评论,如果您想要输出中的所有列,请考虑 window 函数(也称为分析函数或有序分析函数)以帮助识别 min()
group/window(在本例中为PVISBN
)然后过滤:
SELECT *
FROM
(
SELECT yourtable.*, ROW_NUMBER() OVER (PARTITION BY PVISBN ORDER BY PVLICP ASC) as rn
FROM yourtable
) dt
WHERE rn = 1;
这将生成一个 row_number,每个不同 PVISBN
的每一行从 1 开始(您可以 运行 只是子查询以查看它的外观)。然后我们只筛选 1
的 rn
,这将是 PVISBN
最低的 PVLICP
.
的记录
我认为这对你有帮助
SELECT PVISBN, PVWHS, MIN(PVLICP) as PVLICP , ------------ FROM tablename WHERE PVLICP IS NOT NULL or PVLICP <> '' group by PVISBN;
我有这样的情况。我需要使代码工作,以便它仅选择一个基于 PVLICP(车牌)的 PVISBN(项目编号)(我只需要从我返回的 2 中获取第一行)。
TableSeven AS (
SELECT PVISBN, PVWHS, PVLICP, PVRZNE, PVRLOC, PVAZNE, PVALOC, PVLPRG,
ROW_NUMBER() OVER (PARTITION BY PVISBN, PVRZNE ORDER BY PVLICP --, PVRLOC, PVAZNE, PVALOC, PVLPRG
ASC) AS rn
FROM [REPIT].[LEVYDTA].[WHSPDVT]
WHERE PVSPDT BETWEEN @Last2WeekDATE AND @LWDate
--AND PVISBN='0164556221'
) ,
TableTwelve AS (
SELECT PVISBN, PVWHS, PVLICP, PVRZNE, PVRLOC, PVAZNE, PVALOC, PVLPRG, rn
FROM TableSeven
WHERE rn = 1
),
I keep getting 2 rows and should get only the 1st one
如果有人有想法,我将不胜感激。
假设“最旧”和“最低”相同,您可以使用聚合:
SELECT PVISBN, MIN(PVLICP) as PVLICP
FROM yourtable
GROUP BY PVISBN;
对于您的评论,如果您想要输出中的所有列,请考虑 window 函数(也称为分析函数或有序分析函数)以帮助识别 min()
group/window(在本例中为PVISBN
)然后过滤:
SELECT *
FROM
(
SELECT yourtable.*, ROW_NUMBER() OVER (PARTITION BY PVISBN ORDER BY PVLICP ASC) as rn
FROM yourtable
) dt
WHERE rn = 1;
这将生成一个 row_number,每个不同 PVISBN
的每一行从 1 开始(您可以 运行 只是子查询以查看它的外观)。然后我们只筛选 1
的 rn
,这将是 PVISBN
最低的 PVLICP
.
我认为这对你有帮助
SELECT PVISBN, PVWHS, MIN(PVLICP) as PVLICP , ------------ FROM tablename WHERE PVLICP IS NOT NULL or PVLICP <> '' group by PVISBN;