【问题标题】:tsql group by clause with sum and multiple columns带有总和和多列的sql group by子句
【发布时间】:2012-06-30 01:26:12
【问题描述】:

我正在尝试正确编写 TSQL 以创建一个包含以下旧列和新派生列的新表:

日期、10 分钟时间、代码、价格、SumItems。

新表应包括两个派生列; 10minTime 仅包含 10min 时间段(例如 10:40、10:30、10:20),SumItems 包含每 10min 时间段内的项目总和。其他列应保持不变。

原始数据是这样的:

    Date        Time       Code Price   Items
    2012-05-10  10:43:00    a   1351.9  2
    2012-05-10  10:42:00    a   1351.7  5
    2012-05-10  10:41:00    a   1351.3  5
    2012-05-10  10:40:00    a   1351.5  8
    2012-05-10  10:39:00    a   1351.8  3
    2012-05-10  10:38:00    a   1351.9  5
    2012-05-10  10:37:00    a   1351.5  6
    2012-05-10  10:35:00    a   1352.2  2
    2012-05-10  10:34:00    a   1352.0  3
    2012-05-10  10:32:00    a   1352.3  6

这是我到目前为止所拥有的,但它有错误。如果我删除 [Price] 则它会运行但会产生错误的结果。

SELECT TOP 1000 [date]
      ,min([time]) as 10minTime
      ,[price]
      ,sum([Items]) as SumItems
  FROM [MarketData].[dbo].[MyData]
  group by [Date],DATEPART(hour, [Time]),(DATEPART(minute, [Time]))%10
  order by [date] desc, 10minTime desc

感谢您的任何建议/帮助!

【问题讨论】:

  • Time 上的数据类型是什么?
  • 价格应该如何计算?
  • GSerg - 我看到了这个问题,但想适应包含多个列
  • LittleBoddyTables - 新表的价格应该 = 10 分钟间隔时间戳内的最短时间

标签: tsql group-by


【解决方案1】:
SELECT TOP 1000 
     m1.date
      ,min(m1.time) as 10minTime
      ,(Select price from dbo.MyData m2
        where m2.Date = m1.Date
        and DATEPART(hour, m2.Time) = DATEPART(hours, m1.Time)
        and DATEPART(minute, m2.Time) = DATEPART(minute, m2.Time) %10)

      ,sum(Items) as SumItems
  FROM dbo.MyData m1
  group by [Date],DATEPART(hour, [Time]),(DATEPART(minute, Time))%10
  order by [date] desc, 10minTime desc

【讨论】:

  • 新表应从与包含最短时间的行匹配的行中获取价格(在 10 分钟间隔时间戳内)。该要求似乎不适合上述任何功能。
  • @user1225208 好的,所以编辑后的版本可能更好,但未经测试。
  • 太棒了!我会同意的。可能未经测试,但可以理解。如果需要我可以修改。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2018-02-12
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多