2017-07-03 126 views
-1
两者之间

我有这个查询得到这两个日期我怎样才能得到所有月份的日期

SELECT date as date_month, status FROM tbl_reports WHERE status != 0 AND (date BETWEEN '2017-01-01' AND '2017-12-31') GROUP BY MONTH(date) 

结果

date_month  
    2017-04-19 
    2017-05-24 
    2017-06-26 
    2017-07-01 

,但我怎么能知道检查结果,即使之间的所有regsiterd数据还有其它月份

要导致不regsitered输入

Date_month 
    2017-01-01 
    2017-02-01 
    2017-03-01 - it will give this value if there is no such data in this month 
    2017-04-19 - i will get the input date from database 
    '' '' '' 
    2017-12-31 

有可能吗?或者我需要一些PHP代码来操纵这些数据? 谢谢你提出我的回答我的问题.. :)

+0

首先:您的查询是不正确的。查询的SELECT部分​​中没有聚合函数。看起来你是在滥用小组来获得某种独特的副作用,每个月只选择一个日期? –

+0

至于问题本身:我认为你必须考虑创建一个有两列的表格:年份和月份。并且你从2017年1月1日填写该表,直到2027-12年或者什么日期与你有关。 然后,您可以将该表中的日期添加到您当前的查询中 –

+0

ohh我明白了..谢谢sr ..您的权利,但是如果我需要选择一个月内的每个数据并且只给出一个数据没有价值(他们每个月的第一天的价值。)是否有可能..我会按功能删除我的组?并按顺序使用? –

回答

1

创建一个额外的表,名为datehelper。提供2列:年份和月份。并填写年份:2017年至2027年和1/12个月。

SELECT 
    datehelper.year, 
    datehelper.month, 
    r.status 
FROM datehelper 
LEFT JOIN tbl_reports r ON MONTH(r.date) = datehelper.month 
    AND YEAR(r.date) = datehelper.year AND status != 0 
WHERE (datehelper.year = '2017') 
ORDER BY datehelper.year, datehelper.month 

我发现如果在某个月有更多的记录,你会得到左边加入的部分的重复。 你期望什么状态?我们认为有状态为0(不含)状态= 1,状态记录= 2

datehelper:

year month  
    2017 1 
    2017 2 
    2017 3 
    2017 4 
    ... 
    2017 11 
    2017 12 
    2018 1 
    ... 
+0

我该如何放置月份?我在1/12或1到12有点混淆? sory xD –

+0

是2017 - 1; 2017 - 2等 –

+0

哦w8哈哈哈我会把它现在 –

相关问题