我需要查詢的幫助才能將按月份分組的所有值彙總爲15天。Group-By按每半個月的日期範圍
嘗試:
SELECT sum(price) From table WHERE ADD_DATE(date, INTERVAL 15 DAY);
預期的結果:
Jan Day 1 - 15 = 5.2
Jan Day 16 - 31 = 80.4
Feb Day 1 - 15 = 50
Feb Day 16 - 28 = 80.2
.....
我需要查詢的幫助才能將按月份分組的所有值彙總爲15天。Group-By按每半個月的日期範圍
嘗試:
SELECT sum(price) From table WHERE ADD_DATE(date, INTERVAL 15 DAY);
預期的結果:
Jan Day 1 - 15 = 5.2
Jan Day 16 - 31 = 80.4
Feb Day 1 - 15 = 50
Feb Day 16 - 28 = 80.2
.....
我認爲這將做的工作:
SELECT SUM(price) AS price_sum, month_half FROM
(
SELECT price,
IF(
DATEDIFF(`date`, DATE_FORMAT(`date`, "%Y-%m-01")) > 15,
CONCAT(
DATE_FORMAT(`date`, "%b %Y Day 16 - "),
DATE_FORMAT(
DATE_SUB(
DATE_ADD(DATE_FORMAT(`date`, "%Y-%m-01"), INTERVAL 1 MONTH),
INTERVAL 1 DAY), "%d"
)
),
DATE_FORMAT(`date`, "%b %Y Day 1 - 15")
) AS month_half,
`date` AS order_date
FROM table WHERE
`date` >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
) AS t
GROUP BY month_half ORDER BY order_date
這裏發生的是,我使用DATEDIFF找到自本月開始以來的天數,從而找出哪一天的一半值對應的月份日期。 此外,我還使用DATE_SUB以及DATE_ADD查找月份的最後一天(出於顯示原因)。
我添加了%Y格式參數,以防跨越日期範圍超過1年,在這種情況下,您將重複月份名稱。
希望它有幫助。乾杯。
這基本上從1月15日和16月底分解提取物。 MySQL有一個不錯的簡單函數「LAST_DAY()」返回給定月份的最後一天
select
CONCAT(DATE_FORMAT(`date`, '%b %Y Day '),
case when dayofmonth(`date`) < 16
then '01-15'
else CONCAT('16-', right(last_day(`date`), 2) )
end) as CharMonth,
sum(price) as TotalPrice
from
invoice
group by
CharMonth
order by
year(`date`),
month(`date`),
min(dayofmonth(`date`))
以上將通過這個命令的目的顯示的
CharOfMonth TotalPrice
Dec 2011 Day 01-15 226.98
Dec 2011 Day 16-31 108.12
Jan 2012 Day 01-15 983.08
Jan 2012 Day 16-31 235.02
Feb 2012 Day 01-15 271.29
Feb 2012 Day 16-29 382.91
Mar 2012 Day 01-15 900.28
爲例跨越一年的例子是確保2011年之前的所有2011年。隨後,我不希望在「1月」之前出現「2月」,甚至是01-15和16-的字母順序的月份。可以交換訂單,所以我在每個組內的年份(),月份()和MINIMUM日期明確訂購...即:強制數據在組內最低的一天...即:1-15 vs 16到不管...
它總是明確的15天嗎?多長時間你想要一個整體的時間......一個範圍,一年?會不同的分組間隔變化? – DRapp 2012-03-02 22:24:14
是的,總是15天!持續時間範圍一年,沒有變化分組 – Igor 2012-03-02 22:27:19
你知道1月16日至31日是16天嗎? 2月16日至28日是13天? – ruakh 2012-03-02 22:47:53