簡體   English   中英

在SQL查詢中按日期,日間隔分組

[英]Group by date, day interval in SQL query

假設我有一個類似於以下(簡化)的表:

| Name  | Date     | Hours |
| Bob   | 10/1/13  |  5    |
| John  | 10/1/13  |  8    |
| Bob   | 10/2/13  |  6    |
| Ashley| 10/2/13  |  4    |
...
| Bob   | 10/17/13 |  4    |
| John  | 10/17/13 |  6    |
| John  | 10/18/13 |  3    |
...

給定一個開始日期(例如10/1/13),如何構建一個查詢以將名稱,SUM(小時)分組為間隔14天? 所以結果會是這樣的:

| Name  | Period              | SUM(Hours) |
| Bob   | 10/1/13 - 10/14/13  |  11        |
| John  | 10/1/13 - 10/14/13  |  8         |
| Ashley| 10/1/13 - 10/14/13  |  4         |
| Bob   | 10/15/13 - 10/29/13 |  4         |
| John  | 10/15/13 - 10/29/13 |  9         |

我已嘗試過帖子中列出的建議,例如: 按周/日間隔范圍分組但是他們通常假設您想​​要實際的周數。 由於這些只是間隔14天,因此不一定與一年中的幾周一致。

任何建議或指導表示贊賞!

編輯:這是查詢NexusDB服務器,因此它使用SQL:2003標准。

這可能是這樣的嗎? (假設它是MySQL)

更新 :在SQL Fiddle中測試(感謝@ pm-77-1): http ://sqlfiddle.com/#!2/3d7af / 2

謹慎之處 :由於我們在這里進行日期算術,如果它將在大型表上運行,則此查詢可能會變得很重。

SELECT Name, 
CONCAT(DATE_ADD(<your-starting-date>, INTERVAL period*14 day),
" - ",
DATE_ADD(<your-starting-date>, INTERVAL period*14+13 day)) as Period,
Hours FROM 
(SELECT Name, 
FLOOR(DATEDIFF(Date,<your-starting-date>)/14) AS period, 
SUM(Hours) as Hours 
FROM <yourtable> GROUP BY period, name) p;

NexusDB的更新。 我在NexusDB中找到了DateDiff替換的一些信息:

http://www.nexusdb.com/support/index.php?q=node/10091

考慮到這一點,您有兩種選擇:要么將該功能添加到數據庫中,那么您不必修改查詢,或者用該定義替換DATEDIFF:

SELECT Name, 
CONCAT(DATE_ADD(<your-starting-date>, INTERVAL period*14 day),
" - ",
DATE_ADD(<your-starting-date>, INTERVAL period*14+13 day)) as Period,
Hours FROM 
(SELECT Name, 
FLOOR(cast((cast(Date as float ) - cast(<your-starting-date> as float)) as integer)/14) as period,
SUM(Hours) as Hours 
FROM <yourtable> GROUP BY period, name) p;

暫無
暫無

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

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