You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多日多记录数据表提取每日最后一条非0有效Volume值?

解决每日最后一条有效记录提取问题

问题分析

你的报错是因为SQL Server中没有DATE()内置函数,需要用CAST或CONVERT来提取日期部分。另外原查询未过滤Volume=0的无效记录,逻辑也未完全匹配需求。

正确SQL实现

要提取每日最后一条Volume≠0的记录,可采用以下两种方案:

方案1:子查询关联

SELECT 
    t.Volume,
    CAST(t.Datestamp AS DATE) AS [Date]
FROM Mytable t
INNER JOIN (
    -- 先筛选有效记录,再按日期分组取当日最晚时间
    SELECT 
        CAST(Datestamp AS DATE) AS [Date],
        MAX(Datestamp) AS MaxDatetime
    FROM Mytable
    WHERE Volume <> 0
    GROUP BY CAST(Datestamp AS DATE)
) dt ON t.Datestamp = dt.MaxDatetime
ORDER BY [Date] DESC

方案2:窗口函数(更简洁)

SELECT 
    Volume,
    CAST(Datestamp AS DATE) AS [Date]
FROM (
    SELECT 
        *,
        -- 按日期分组,按时间倒序排名,取每组第一条
        ROW_NUMBER() OVER(PARTITION BY CAST(Datestamp AS DATE) ORDER BY Datestamp DESC) AS rn
    FROM Mytable
    WHERE Volume <> 0
) t
WHERE rn = 1
ORDER BY [Date] DESC

关键说明

  • 用CAST(Datestamp AS DATE)或CONVERT(date, Datestamp)替代DATE(Datestamp),这是SQL Server提取日期部分的标准写法
  • 必须通过WHERE Volume <> 0过滤无效记录,避免取到当日最后一条为0的无效数据
  • 窗口函数ROW_NUMBER()的写法更直观,适合复杂的分组排名场景

内容的提问来源于stack exchange,提问作者BobsBugs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:07:34