Informix DB - 按年,月,周,日,小时分组的SQL组

时间:2013-03-23 17:18:28

标签: sql informix

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

我的情景如下:

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

我熟悉在Informix DB中编写SQL查询,但这种情况对我来说非常复杂,我无法弄清楚如何去做。

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

3 个答案:

答案 0 :(得分:3)

如果这不是你所需要的,它可能会让你有所帮助,或者给你一些想法:

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

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

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

答案 1 :(得分:0)

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

具有讽刺意味的是,要获得小时,您可以使用日期函数 - to_char()。小时可能有适当的面具。如果没有,你将不得不使用子串。

对于日期组件,您将使用时间组件year(),month()以及day()或weekday()。本周你可能会运气不好。

请参阅以下参考页:

修改

这是一个使用年份函数的简单示例。

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

答案 2 :(得分:0)

当我运行此查询时,出现错误: "错误:发生语法错误。 (国家:37000,土着法典:FFFFFF37)" 您必须将组更改为列号,即

选择年份(resultdate)作为resultYear,count(*)as resultCount from caa44340 分组1

让它正确运行!