【问题标题】:MSSQL server SQL query how to utilize "group by"MSSQL 服务器 SQL 查询如何利用“分组依据”
【发布时间】:2020-05-15 04:07:02
【问题描述】:

Table Data

My_table_data.

testdate                plant value
2020-05-14 02:00:00.000 1   68
2020-05-14 01:00:00.000 3   115
2020-05-14 02:00:00.000 2   107
2020-05-14 03:00:00.000 2   102
2020-05-14 05:00:00.000 2   104
2020-05-14 06:00:00.000 2   111
2020-05-14 08:00:00.000 1   74
2020-05-14 08:00:00.000 2   114
2020-05-14 09:00:00.000 1   70
2020-05-14 09:00:00.000 2   114
2020-05-14 03:00:00.000 3   106
2020-05-14 03:00:00.000 3   102
2020-05-15 02:00:00.000 2   108
2020-05-14 05:00:00.000 1   74
2020-05-14 04:00:00.000 3   96
2020-05-14 04:00:00.000 3   97
2020-05-14 06:00:00.000 1   80
2020-05-14 03:00:00.000 1   77
2020-05-14 06:00:00.000 3   102

我是复杂 SQL 查询短语的新手。如何达到如下结果。 条件 1.时间戳最新数据(小时) 2. 每株植物单行。

WITH data AS(
SELECT testdate, plant, value, (DATEPART(HOUR,testdate))AS dH FROM My_table_data
WHERE testdate >= (SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 120))
)
SELECT data.testdate, data.plant, data.value from data
WHERE data.dH= (SELECT MAX(data.dH) FROM data)
GROUP BY data.plant
ORDER BY data.plant DESC;

报错!!

testdate                   Plant      value
2020-05-14 09:00:00.000       1        70
2020-05-14 09:00:00.000       2        114
2020-05-14 06:00:00.000       3        102

【问题讨论】:

    标签: sql-server-2005


    【解决方案1】:

    我认为这应该很简单

    with maxData
    AS
    (
      SELECT MAX(testDate) as testDate, plantId
      FROM My_table_data
      GROUP BY plantId
    )
    select  
      t.testDate,
      t.plantId,
      t.value
    from My_table_data t
    INNER JOIN maxData m
      on t.testDate = m.testDate
      and t.plantId = m.plantId
    order by plantId
    

    这样做的目的是使用 CTE 查找每个 plantId 的最大日期,然后将该信息连接回原始表以查找与该植物 ID 和日期相对应的 value

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多