当前位置: 首页 > 面试题库 >

SQL查询按日期时间分组问题?

孟跃
2023-03-14
问题内容

我有这个SQL查询:

  SELECT DISTINCT 
         [BatchCode]
         ,SUM([Quantity]) as 'Created'
         ,[TotalQuantity]
         ,[Status]
         ,[Destination]
         ,[DateCreated]
         ,[CreatedBy]
    FROM [FGIS].[dbo].[DropshipPackinglist]
GROUP BY BatchCode, TotalQuantity, Status, Destination, CreatedBy, ModifiedBy, DateCreated

结果是这样的:

BatchCode               Created   TotalQuantity   Status     Destination        DateCreated               CreatedBy
---------------------------------------------------------------------------------------------------------------
0005041007100AHWA11HG   86        86              CREATED    MediTelecom S.A.   2010-09-10  00:00:00.000    NULL
0005041007100AHWA11HGK  19        50              ALLOCATED  USA                2010-09-12 07:35:17.000     jy
0005041007100AHWA11HGK  31        50              ALLOCATED  USA                2010-09-12 07:35:20.000     jy

我现在的问题是我无法将DateCreated分组,因为它具有不同的时间。

我只想按日期分组。范例:2010-09-12

谢谢并恭祝安康…


问题答案:

我认为值得单独发布以下内容:

使用char转换来削减超时日期(广播或转换为varchar)比使用慢DateAdd(Day, DateDiff(Day, 0, DateCreated),0)。我制定了[完整的脚本和性能测试结果以支持此断言

SELECT DISTINCT 
   BatchCode
   ,SUM(Quantity) as Created
   ,TotalQuantity
   ,Status
   ,Destination
   ,DateAdd(Day, DateDiff(Day, 0, DateCreated), 0) as DayCreated
   ,CreatedBy
FROM FGIS.dbo.DropshipPackinglist
GROUP BY
   BatchCode,
   TotalQuantity,
   Status,
   Destination,
   CreatedBy,
   ModifiedBy,
   DateDiff(Day, 0, DateCreated) -- note that the DateAdd convert back to datetime is not needed

另外,请注意,您的GROUP BY列表与SELECT列表不同,因此需要进行一些调整。

更新

看来,使用DateAdd和varchar转换所节省的CPU数量虽然相对很多,但绝对不是很多(每行只有几分之一毫秒)。但是,这仍然是性能上的差异,对我来说,最好是尽一切可能。



 类似资料:
  • 问题内容: 我在MySQL中有一张表,该表显示了我每天记录的小时数。我正在尝试建立一个视图,该视图将允许我按块/天范围快速将数据分组。最简单的情况是每月一次,这并不难。我可以将日期选择为“%y-%m”,然后按该列分组。 前任: 如果我按月分组,那很好。但是我的问题是,我需要从每月的13号到下个月的12号进行分组(例如:7月13日至8月12日,8月13日至9月12日,等等)。 有没有一种简单的方法可

  • 问题内容: 我正在管理事件数据库。每个事件都有开始和结束时间戳记()。 目前,我可以通过一个SQL查询执行以下操作: 建立日历,并记下发生事件的日期 列出给定日期(YYYY / MM / DD,YYYY / MM)中发生的事件 问题是当一个事件跨越几天时,我无法在它的开始和结束时间戳之间的日期列出它。 例如: 活动开始于2011/05/25和结束于2011/05/27,但我无法在页面2011/05

  • 我有一个疑问。我有一个表,其中有些记录重复日期时间。我必须把最后一个从日期时间重复的地方拿来。示例: 它应该返回ID3、4和7 你能帮我吗?谢谢!

  • 问题内容: 我希望得到一些帮助,以帮助我编写一些自己编写的SQL语句。 我有一张数据表: 我需要获得以下信息: 换句话说,按日期划分日期范围。在SQL中甚至可能吗? 我的数据库是Oracle 11G R2,由于某些情况,我担心不能使用PL / SQL。 问题答案: 可以在SQL中执行此操作。有两个技巧。首先是生成一系列数字,您可以使用进行CTE处理。 第二个是将正确的逻辑放在一起以扩展日期,同时保

  • 问题内容: 在下面的表格中,我需要获取状态日期等于2的最大日期的行 我需要使用此请求获取具有最大日期和按REMUN_ID分组的行 结果 : 我需要调整请求以从此结果中仅获取statut = 2的行 我的目的是获取以下结果,这是第一个查询的子查询,以仅获取具有状态2的子查询。 PS:如果我使用了将从中得到这些结果的子句: 那不是我想要的。 有什么建议?谢谢 问题答案: SQLFiddle:http

  • 问题内容: 我有一个这样的示例表: 像这样的一些样本数据 我需要按日期顺序和vKey / DKey组合对数据进行分组,并像这样显示 最好的方法是什么? 提前致谢 问题答案: Select vKey ,dKey ,StartTrip = min(StartTrip) ,EndTrip = max(EndTrip) ,Distance = sum(Distance) From ( Select * ,