1

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

我的情况如下:

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

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

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

4

3 回答 3

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

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

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

于 2013-03-24T08:07:28.600 回答
0

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

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

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

请参阅这些参考页面:

编辑

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

select year(resultdate) resultyear, count(*) results
from etc
group by year(resultdate)
于 2013-03-23T17:30:31.083 回答
0

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

select year(resultdate) as resultYear, count(*) as resultCount from caa44340 group by 1

让它正确运行!

于 2016-10-21T18:37:59.333 回答