【问题标题】:Is it possible to group by day, month or year with timestamp values?是否可以使用时间戳值按日、月或年分组?
【发布时间】:2018-02-17 21:54:59
【问题描述】:

我有一个表ORDERS(idOrder, idProduct, Qty, OrderDate),其中OrderDate 是一个带有时间戳值的varchar 列,是否可以获得每天、每周、每月或每年的Qty

表格如下所示:

---------------------------------------
|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| 
-------------------------------

【问题讨论】:

  • 用您正在使用的数据库标记您的问题,并提供示例数据和所需的结果。

标签: sql sql-server


【解决方案1】:

是的,非常简单:

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'

【讨论】:

  • 很抱歉,我没有看一眼我的桌子是什么样子,我想我误导了你
  • 仍然是 TO_DATE 和 TRUNC 是你需要的 ;)
  • 我正在使用 sql server,我相信 TO_DATE 是 Oracle 函数^^"
  • 哦,我明白了!在这种情况下尝试 -- 将当前日期转换为 YYYY-MM-DD 格式 SELECT CONVERT(VARCHAR(10), GETDATE(), 120);
【解决方案2】:

不幸的是,TSQL TIMESTAMP 数据类型并不是真正的日期。根据this SO question 的说法,他们甚至更改了名称,因为它用词不当。您最好使用 DEFAULT = GETDATE() 创建一个 DATETIME 字段,以准确记录创建行的时间。

话虽如此,我见过的最有效的方法是跟踪日期到天/周/月/季度/等。是使用仅列出每个日期并具有 WeekOfMonth 和 DayOfYearand 等字段的日期维度表。将新的 DateCreated 字段加入其中后,您可以获得有关该日期的各种信息。您可以搜索将为您创建日期维度表的脚本。

【讨论】:

  • 非常感谢,我一直在寻求这个解决方案,直到@MattDekinder 给了我想要的东西^^"
【解决方案3】:

您似乎想在这里做两件事:第一组按您的 idProduct 和 OrderDate

select idProduct, sum(Qty), OrderDate from [yourtable] group by idProduct, OrderDate

这将为您提供所需的金额。接下来,您要转换时间格式。我假设你的邮票是纪元时间(从 1970 年 1 月 1 日开始的秒数),所以转换它们的形式如下: dateadd(s,[your time field],'19700101')

您似乎还希望将日期格式设置为 mm/dd/yyyy。 convert(NVARCHAR, [date],101) 是实现这一目标的格式

一起:

select idProduct, sum(Qty), convert(NVARCHAR,dateadd(s,OrderDate,'19700101'), 101) from [yourtable] group by idProduct, OrderDate

【讨论】:

  • O_O !非常感谢你
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 2019-03-13
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2014-05-31
相关资源
最近更新 更多