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

SQL查询需求:筛选最大时间戳为上周的仪表数据

完整SQL查询解决方案

我来帮你补全并优化这个查询,确保它能精准筛选出最新时间戳属于上周的仪表记录:

SELECT 
    dbo.meter.DataImportCode,
    dbo.meter.NAME AS MeterName, -- 给重复的NAME字段加别名,避免歧义
    dbo.company.NAME AS CompanyName,
    dbo.meter.MeterNumber,
    MAX(dbo.meterdata.RoundedTimeStamp) AS 'laatste datum',
    dbo.MeterOperator.Description,
    dbo.meter.CumulativeReadings
FROM 
    dbo.meter
-- 补全仪表与数据记录表的关联(请根据实际表结构调整关联字段)
LEFT OUTER JOIN 
    dbo.MeterData ON dbo.meter.Id = dbo.MeterData.MeterId
-- 补全仪表与公司表的关联
LEFT OUTER JOIN 
    dbo.company ON dbo.meter.CompanyId = dbo.company.Id
-- 补全仪表与运营商表的关联
LEFT OUTER JOIN 
    dbo.MeterOperator ON dbo.meter.MeterOperatorId = dbo.MeterOperator.Id
-- 按非聚合字段分组,确保每个仪表只返回一条最新记录
GROUP BY 
    dbo.meter.DataImportCode,
    dbo.meter.NAME,
    dbo.company.NAME,
    dbo.meter.MeterNumber,
    dbo.MeterOperator.Description,
    dbo.meter.CumulativeReadings
-- 筛选最新时间戳落在上周范围内的记录
HAVING 
    -- 上周一开始(周一为一周起始,可根据需求调整)
    MAX(dbo.meterdata.RoundedTimeStamp) >= DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) - 1, 0)
    -- 本周一开始(确保只包含上周的记录)
    AND MAX(dbo.meterdata.RoundedTimeStamp) < DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)

关键说明:

  • 表关联调整:我假设了表之间的关联字段(比如meter.Id和MeterData.MeterId),你需要根据实际数据库的表结构修改这些关联条件,否则查询会报错。
  • 字段别名:给dbo.meter.NAME和dbo.company.NAME加了别名,避免结果集中出现重复的列名导致混淆。
  • 上周范围定义:这里的“上周”是指自然周的上周(从周一到周日)。如果你的需求是“过去7天”,可以把HAVING子句替换成:
    HAVING 
        MAX(dbo.meterdata.RoundedTimeStamp) >= DATEADD(DAY, -7, GETDATE())
        AND MAX(dbo.meterdata.RoundedTimeStamp) <= GETDATE()
    
  • 聚合与分组:因为我们用了MAX()聚合函数,所以所有非聚合的字段必须放到GROUP BY子句里,这样才能保证每个仪表只返回一条包含最新时间戳的记录。

注意事项:

  • 确认RoundedTimeStamp字段是datetime/datetime2类型,否则日期计算会出现异常。
  • 如果你的数据库不是SQL Server(比如MySQL、Oracle),日期函数会有差异,需要对应调整日期计算逻辑。

内容的提问来源于stack exchange,提问作者mart de jong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:03