【问题标题】:Informix DB - SQL Group By Year, Month, Week, Day, HourInformix DB - 按年、月、周、日、小时进行 SQL 分组
【发布时间】:2013-03-23 17:18:28
【问题描述】:

我想在 Informix db 中编写 sql 查询以返回按年/月/周/日/小时分组的结果(我将为每个查询编写 5 个 sql 查询)。

我的场景如下:

  • 我有两个表格,比赛表格(包含有关比赛名称、描述、开始日期、提交日期、审核日期、结果日期的信息),另一个表格是提交表格(包含提交给比赛的内容,例如提交 ID、提交者 ID、提交日期等)。
  • 我想要实现的是通过按天(sql 返回有关每天提交的提交数量的统计信息)、按周、按月或按年 ..etc 分组的提交来获得比赛的进展。

我熟悉在 Informix DB 中编写 sql 查询,但这种情况对我来说非常复杂,我不知道该怎么做。

您能否提供一个完成上述场景的示例查询?

【问题讨论】:

    标签: sql informix


    【解决方案1】:

    如果这不是您所需要的,它可能会帮助您取得一些进展,或者给您一些想法:

    SELECT contest_id, YEAR(submission_date) AS submission_period, COUNT(*),
           "Y" AS sub_type
      FROM submissions
      GROUP BY 1, 2
    UNION ALL
    SELECT contest_id, MONTH(submission_date) AS submission_period, COUNT(*),
           "M" AS sub_type
      FROM submissions
      GROUP BY 1, 2
    UNION ALL
    SELECT contest_id, DAY(submission_date) AS submission_period, COUNT(*),
           "D" AS sub_type
      FROM submissions
      GROUP BY 1, 2
    ORDER BY 1, 4, 2
    

    但是,如果您是逐年查看月份而不是孤立地查看月份或年份中的每周,那么我强烈建议您查看创建“时间维度”,例如在数据仓库应用程序中使用的。这是一个包含每天记录的表格,看起来有点像这样:

    Date         Year   Month     Week      Quarter  Day    MthName
    2013-01-01 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Tues | January
    2013-01-02 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Wed  | January
    ..
    2013-03-20 | 2013 | 2013-03 | 2013W12 | 2013Q1 | Wed  | March
    ..
    2013-05-01 | 2013 | 2013-05 | 2013W18 | 2013Q2 | Wed  | May
    

    通过将提交日期加入此表,您可以按适合您要求的任何列进行分组。

    专业提示:不要用我标记的标题来称呼它们,使用保留字会让你感到痛苦:-)

    【讨论】:

      【解决方案2】:

      根据文档,informix 具有执行此操作的功能。您只是不要对每个日期组件使用相同的函数。

      具有讽刺意味的是,要获取小时,您使用日期函数 - to_char()。这个小时可能有一个合适的面具。如果没有,您将不得不使用子字符串。

      对于日期组件,您可以使用时间组件 year()、month() 以及 day() 或 weekday()。这周你可能不走运。

      查看这些参考页面:

      编辑

      这是一个简单的例子,使用 year 函数。

      select year(resultdate) resultyear, count(*) results
      from etc
      group by year(resultdate)
      

      【讨论】:

      • 感谢您的回答,但这并不能回答问题,我的问题是如何通过 sql 语句编写一个分组,通过使用比赛的日期将比赛按小时/天/周/月/年划分.
      【解决方案3】:

      当我运行这个查询时,我得到一个错误: “错误:发生语法错误。(状态:37000,本机代码:FFFFFF37)” 您必须将分组更改为列号,即

      从 caa44340 中选择 year(resultdate) 作为 resultYear,count(*) 作为 resultCount 按 1 分组

      让它正常运行!

      【讨论】:

        猜你喜欢
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 2021-12-05
        • 2017-02-15
        • 2020-11-11
        • 1970-01-01
        • 2017-01-25
        相关资源
        最近更新 更多