是否可以按日期,月份或年份对时间戳值进行分组?

时间:2017-09-08 22:57:04

标签: sql sql-server

我有一个表OrderDate,其中Qty是一个带有时间戳值的varchar列,是否可以获得每天,每周,每月或每年的--------------------------------------- |idOrder | idProduct | Qty | OrderDate| --------------------------------------- | 1 | 5 | 20 | 1504011790 | | 2 | 5 | 50 | 1504015790 | | 3 | 5 | 60 | 1504611790 | | 4 | 5 | 90 | 1504911790 | -----------------------------------------

表格如下:

------------------------------
| idProduct | Qty | OrderDate|
-------------------------------
|  5        | 70  | 08/29/2017|
|  5        | 60  | 09/05/2017|
|  5        | 90  | 09/08/2017| 
-------------------------------

我想要这样的东西

#load "..\shared\order.csx"

using System;

public static void Run(Order myQueueItem, out Order outputQueueItem,TraceWriter log)
{
    log.Info($"C# Queue trigger function processed order...");
    log.Info(myQueueItem.ToString());

    outputQueueItem = myQueueItem;
}

3 个答案:

答案 0 :(得分:2)

看起来你想在这里做两件事:第一组由你的idProduct和OrderDate

dateadd(s,[your time field],'19700101')

这将为您提供所需的金额。接下来,您要转换时间格式。我假设你的邮票是在大纪元时间(从1970年1月1日起的秒数)所以转换它们采取以下形式: convert(NVARCHAR, [date],101)

看起来您还希望将日期格式化为mm / dd / yyyy。 select idProduct, sum(Qty), convert(NVARCHAR,dateadd(s,OrderDate,'19700101'), 101) from [yourtable] group by idProduct, OrderDate是完成该

的格式

在一起:

original_grad = (actual gradient computed by TF)

答案 1 :(得分:1)

不幸的是,TSQL TIMESTAMP数据类型并不是真正的日期。根据{{​​3}}他们甚至更改了名称,因为它是如此用词不当。使用DEFAULT = GETDATE()创建DATETIME字段要好得多,以便准确记录创建行的时间。

话虽这么说,我见过的最高效的方式是追踪日期/周/月/季/等。是使用仅列出每个日期的日期维度表,并具有WeekOfMonth和DayOfYearand等字段。一旦您将新的DateCreated字段加入其中,您就可以获得有关该日期的各种信息。您可以使用谷歌脚本为您创建日期维度表。

答案 2 :(得分:0)

是的,非常简单:

TRUNC ( date [, format ] )

格式可以是:

TRUNC(TO_DATE('22-AUG-03'), 'YEAR')
Result: '01-JAN-03'

TRUNC(TO_DATE('22-AUG-03'), 'MONTH')
Result: '01-AUG-03'

TRUNC(TO_DATE('22-AUG-03'), 'DDD')
Result: '22-AUG-03'

TRUNC(TO_DATE('22-AUG-03'), 'DAY')
Result: '17-AUG-03'