具有平均值和分组的SQL查询

时间:2017-12-04 11:40:54

标签: sql-server

我只想问你们,特别是那些有MsSQL知识的人,关于我的问题。

我的目标是获取平均投放时间,并按照每天/每周/每月的投放日期和路线ID对我的数据进行分组。

这是我的疑问:

SELECT 
RouteID,
CONVERT(date, [DeliveryDate]) AS delivery_date,
AVG(
    DATEDIFF(
        day, 
        CONVERT(date, [UnloadDate]),
        CONVERT(date, [DeliveryDate])
        )
    ) as Averate_Delivery_Time
  FROM [CARGODB].[dbo].[Cargo_Transactions] 
  WHERE 
    [DeliveryDate] IS NOT NULL AND 
    [UnloadDate] != 0 AND
    [StageID] = 'D' AND 
   ( CONVERT(date, [DeliveryDate]) LIKE '%2016%' or
    CONVERT(date, [DeliveryDate]) LIKE '%2017%')
GROUP BY CONVERT(date, [DeliveryDate]), [RouteID]
ORDER BY CONVERT(date, [DeliveryDate]) DESC

我不确定平均交货时间是否正确,如果您认为错误或我的查询中还有其他事情需要纠正,请告诉我。

更新

我能够得到正确的查询:

SELECT [RouteID], 
CAST(DATEPART(YEAR,[DeliveryDate]) as varchar) + ' Week ' + 
CAST(DATEPART(WEEK,[DeliveryDate]) AS varchar) AS week_name,
AVG(DATEDIFF(day, CONVERT(date, [UnloadDate]), CONVERT(date, 
[DeliveryDate]))) as Average_Delivery_Days 
FROM [CARGODB].[dbo].[Cargo_Transactions] 
WHERE [DeliveryDate] IS NOT NULL AND [DeliveryDate] != 0 
AND CONVERT(date, [DeliveryDate]) BETWEEN '2016-01-01' AND GETDATE() 
AND [UnloadDate] IS NOT NULL AND [UnloadDate] != 0 AND [DeliveryDate] > 
[UnloadDate] 
AND [Deleted] = 0 and [StageID] = 'D' 
GROUP BY DATEPART(YEAR,[DeliveryDate]), DATEPART(WEEK,[DeliveryDate]), 
[RouteID] 
ORDER BY DATEPART(YEAR,[DeliveryDate]), DATEPART(WEEK,[DeliveryDate]), 
Average_Delivery_Days desc

但我现在有一个更复杂的查询。我有这个样本数据:

RouteID  |  week_name  |  yearnum  |  weeknum  |  Average_Delivery_Days
=======================================================================
MK       | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
TSM      | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
E        | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
A        | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
D        | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
MP       | 2016 Week 2 | 2016      |  2        | 1
-----------------------------------------------------------------------
CTN      | 2016 Week 3 | 2016      |  3        | 9
-----------------------------------------------------------------------
BIS      | 2016 Week 3 | 2016      |  3        | 8
-----------------------------------------------------------------------
C        | 2016 Week 3 | 2016      |  3        | 1
-----------------------------------------------------------------------
PN       | 2016 Week 4 | 2016      |  4        |10
-----------------------------------------------------------------------

如何将上述数据设为:

  • MK和TSM合并为1个新的routeID,如Manila1
  • E,A和D作为Manila2合并为另一个
  • MP,CTN和BIS为Visayas
  • C和PN作为棉兰老岛
  • 依旧......

平均交货日期也将改变。

非常感谢您的帮助。谢谢!

0 个答案:

没有答案