Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择最新记录_Sql_Sql Server_Max - Fatal编程技术网

Sql 选择最新记录

Sql 选择最新记录,sql,sql-server,max,Sql,Sql Server,Max,我正在尝试将3行聚合为一行(选择最新记录)。但我还是得到了3张唱片,而不是1张。有什么想法吗?**SQL Server** select [TotalTechPremium] From Premiumfile where [TimeDate Stamp] = (select Max([TimeDate Stamp]) From Premiumfile where PolicyNo = '47

我正在尝试将3行聚合为一行(选择最新记录)。但我还是得到了3张唱片,而不是1张。有什么想法吗?**SQL Server**

select [TotalTechPremium] From Premiumfile
where [TimeDate Stamp] = (select Max([TimeDate Stamp]) 
                          From Premiumfile
                          where PolicyNo = '47-ZCA-000276-02'
                         );

您有多条具有相同时间戳的记录

这可能有助于:

select pf.TotalTechPremium
From Premiumfile pf
where pf.PolicyNo = '47-ZCA-000276-02'
      pf.[TimeDate Stamp] = (select Max(pf2.[TimeDate Stamp]) 
                             From pf2.Premiumfile
                             where pf2.PolicyNo = pf.PolicyNo
                            );
但如果你想要一排,我会:

select top (1) pf.TotalTechPremium
From Premiumfile pf
where pf.PolicyNo = '47-ZCA-000276-02'
order by pf.[TimeDate Stamp] desc;

您有多条具有相同时间戳的记录

这可能有助于:

select pf.TotalTechPremium
From Premiumfile pf
where pf.PolicyNo = '47-ZCA-000276-02'
      pf.[TimeDate Stamp] = (select Max(pf2.[TimeDate Stamp]) 
                             From pf2.Premiumfile
                             where pf2.PolicyNo = pf.PolicyNo
                            );
但如果你想要一排,我会:

select top (1) pf.TotalTechPremium
From Premiumfile pf
where pf.PolicyNo = '47-ZCA-000276-02'
order by pf.[TimeDate Stamp] desc;

在询问T-SQL问题时,样本数据和预期结果也非常重要

由于您没有提供,这只是猜测,但获取“最新”记录的常见方法是使用CTE和
行号
。示例查询如下所示:

WITH CTE AS(
    SELECT [YourColumns]
           ROW_NUMBER() OVER (PARTITION BY [RelevantColumns] ORDER BY [TimestampColumn] DESC) AS RN
    FROM [YourTable])
SELECT [YourColumns]
FROM CTE
WHERE RN = 1;

如果这样做没有帮助,请查看论坛礼仪,了解如何发布t-SQL问题。

在询问t-SQL问题时,示例数据和预期结果也非常重要

由于您没有提供,这只是猜测,但获取“最新”记录的常见方法是使用CTE和
行号
。示例查询如下所示:

WITH CTE AS(
    SELECT [YourColumns]
           ROW_NUMBER() OVER (PARTITION BY [RelevantColumns] ORDER BY [TimestampColumn] DESC) AS RN
    FROM [YourTable])
SELECT [YourColumns]
FROM CTE
WHERE RN = 1;

如果这没有帮助,请查看论坛礼仪,了解如何发布t-SQL问题。

如果该查询输出3条记录,则表示PremiumFile表中有3条记录的时间戳等于该策略编号的最大时间戳。 也许您忘记了添加一个额外的位置,在那里您可以根据该策略编号再次进行筛选。 或者,您可以将查询替换为:

select top 1 TotalTechPremium
from Premiumfile
where PolicyNo='47-ZCA-000276-02'
order by Timestamp desc

如果该查询输出3条记录,则表示表PremiumFile中有3条记录的时间戳等于该策略编号的最大时间戳。 也许您忘记了添加一个额外的位置,在那里您可以根据该策略编号再次进行筛选。 或者,您可以将查询替换为:

select top 1 TotalTechPremium
from Premiumfile
where PolicyNo='47-ZCA-000276-02'
order by Timestamp desc

以下是使用
行数()的两种不同方法


如果设置“包含实际执行计划”并执行上述操作,则可以看到执行计划是相同的。

以下是使用
行数()的两种不同方法。


如果设置“包含实际执行计划”并执行上述操作,您可以看到执行计划是相同的。

为什么不使用TOP 1?为什么不使用TOP 1?这里也不需要使用CTE,只需使用ROW_NUMBER()就足够了,并在其周围加上另一个SELECT。ROW_NUMBER()非常有用,而且速度很快。@TDP CTE是必需的,您不能在
位置中引用
ROW_NUMBER
,进行2次选择意味着扫描表格两次;这不是必需的。CTE是更好的选择。执行计划相同。我添加了一个测试场景作为答案。除非#表的执行计划不同?…哦,@TDP,您的意思是使用子查询。就个人而言,我更喜欢CTE;我发现它们更容易阅读。这里也不需要使用CTE,只需使用ROW_NUMBER()就足够了,再加上一个SELECT。ROW_NUMBER()非常有用,而且速度很快。@TDP CTE是必需的,您不能在
位置中引用
ROW_NUMBER
,进行2次选择意味着扫描表格两次;这不是必需的。CTE是更好的选择。执行计划相同。我添加了一个测试场景作为答案。除非#表的执行计划不同?…哦,@TDP,您的意思是使用子查询。就个人而言,我更喜欢CTE;我发现它们更容易阅读。我个人能想到的唯一原因是第一个查询需要两次扫描。我真希望人们在否决投票时发表评论;我完全赞成批评;只要是建设性的。@Lamu。有了正确的索引,这应该比使用
row\u number()。我真希望人们在否决投票时发表评论;我完全赞成批评;只要是建设性的。@Lamu。有了正确的索引,这应该比使用
row\u number()。