簡體   English   中英

Informix DB - 按年,月,周,日,小時分組的SQL組

[英]Informix DB - SQL Group By Year, Month, Week, Day, Hour

我想在Informix數據庫中編寫sql查詢以返回按年/月/周/日/小時分組的結果(我將為每個編寫5個sql查詢)。

我的情景如下:

  • 我有兩個表,競賽表(包含競賽名稱,描述,開始日期,提交日期,審查日期,結果日期的信息),另一個表是提交表(包含提交競賽的提交,提交ID,提交者ID,提交日期..等)。
  • 我想要實現的是通過按天分組提交的提交來獲得競賽的進展(sql返回有關每天提交的提交數量的統計數據),或按周,按月或按年...等。

我熟悉在Informix DB中編寫SQL查詢,但這種情況對我來說非常復雜,我無法弄清楚如何去做。

能否請您提供一個完成上述方案的示例查詢?

如果這不是您所需要的,它可能會讓您有所幫助,或者給您一些想法:

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

通過將提交日期加入此表,您可以按適合您要求的列進行分組。

專業提示:不要把它們稱為我標記的那些標題,使用保留字會讓你痛苦:-)

根據文檔,informix具有執行此操作的功能。 您只是不為每個日期組件使用相同的功能。

具有諷刺意味的是,要獲得小時,您可以使用日期函數 - to_char()。 小時可能有適當的面具。 如果沒有,你將不得不使用子字符串。

對於日期組件,您將使用時間組件year(),month()以及day()或weekday()。 本周你可能運氣不好。

請參閱以下參考頁面:

編輯

這是一個使用年份函數的簡單示例。

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

當我運行此查詢時,我收到一個錯誤:“錯誤:發生了語法錯誤。(狀態:37000,本機代碼:FFFFFF37)”您必須將組更改為列號,即

選擇年份(resultdate)作為resultYear,count(*)as resultCount from caa44340 group by 1

讓它正確運行!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM