我想在Informix数据库中编写sql查询,以返回按年/月/周/日/小时分组的结果(我将为每一个编写5个sql查询)。
我的情景如下:
我熟悉在Informix DB中编写SQL查询,但这种情况对我来说非常复杂,我无法弄清楚如何去做。
您能否提供一个完成上述方案的示例查询?
答案 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
让它正确运行!