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 开始(您可以 运行 只是子查询以查看它的外观)。然后我们只筛选 1rn,这将是 PVISBN 最低的 PVLICP.

的记录

我认为这对你有帮助

SELECT PVISBN, PVWHS, MIN(PVLICP) as PVLICP , ------------ FROM tablename WHERE PVLICP IS NOT NULL or PVLICP <> '' group by PVISBN;