我有一个mysql表,数据连接到日期.每行都有数据和日期,如下所示:
2009-06-25 75
2009-07-01 100
2009-07-02 120
Run Code Online (Sandbox Code Playgroud)
我有一个mysql查询,选择两个日期之间的所有数据.这是查询:
SELECT data FROM tbl WHERE date BETWEEN date1 AND date2
我的问题是,即使一天没有数据,我也需要在date1和date2之间获取行.
所以我的查询会错过2009-06-25和2009-07-01之间的空白日期.
我可以用某种方式添加这些日期只有0作为数据吗?
Jos*_*ger 38
您可以使用经常被称为"日历表"的概念.以下是如何在MySql中创建日历表的好指南:
-- create some infrastructure
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
-- only works for 100 days, add more ints joins for more
SELECT cal.date, tbl.data
FROM (
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
FROM ints a JOIN ints b
ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Run Code Online (Sandbox Code Playgroud)
您可能想要创建表cal而不是子选择.
小智 12
Select * from emp where joindate between date1 and date2;
Run Code Online (Sandbox Code Playgroud)
但是这个查询没有显示正确的数据.
例如
1-jan-2013 to 12-jan-2013.
Run Code Online (Sandbox Code Playgroud)
但它显示数据
1-jan-2013 to 11-jan-2013.
Run Code Online (Sandbox Code Playgroud)
小智 10
它很容易处理这种情况
你可以将BETWEEN CLAUSE与date_sub(now(),INTERVAL 30 DAY)和NOW()结合使用
SELECT
sc_cust_design.design_id as id,
sc_cust_design.main_image,
FROM
sc_cust_design
WHERE
sc_cust_design.publish = 1
AND **`datein`BETWEEN date_sub( now( ) , INTERVAL 30 DAY ) AND NOW( )**
Run Code Online (Sandbox Code Playgroud)
快乐编码:)
| 归档时间: |
|
| 查看次数: |
222291 次 |
| 最近记录: |