表格结构:
const nonTreeShakableModules = [
...
'file.css',
...
];
我希望得到2017年第08个月到2018年第01个月之间的结果。
目前的查询是:
+------+-------+--------+--------------------+
| year | month | profit | inventory_turnover |
+------+-------+--------+--------------------+
| 2017 | 7 | 10000 | 2.47 |
| 2017 | 8 | 5000 | 2.47 |
| 2017 | 9 | 10000 | 4.5 |
| 2017 | 10 | 30000 | 6.7 |
| 2017 | 11 | 20000 | 1.7 |
| 2017 | 12 | 15000 | 2.8 |
| 2018 | 01 | 15000 | 1.8 |
+------+-------+--------+--------------------+
但它返回一个空集。
答案 0 :(得分:3)
使用您当前的表结构:
SELECT *
FROM monthly_records
WHERE (year = 2017 and month >= 8) or (year = 2018 and month <= 1)
ORDER BY ID;
我强烈建议不要分别存储年份和月份。我们得到了一个相当简单的查询,但对于更复杂的情况,事情可能会失控。请注意,在使用真正的日期时,我们总是只有两个日期点来检查。
保持简单,只需在此使用日期文字:
SELECT *
FROM monthly_records
WHERE date >= '2017-08-01' AND date < '2018-02-01'
ORDER BY ID;
答案 1 :(得分:2)
您可以使用月份和年份字段撰写名为tmp_date的临时日期字段。然后使用between运算符将该临时日期字段与日期范围进行比较。需要使用Group By和having子句。
select id, STR_TO_DATE(CONCAT('01',',',month,',',year),'%d,%m,%Y') as tmp_date from monthly_records group by id having tmp_date between '2017-12-01' and '2018-01-02';
答案 2 :(得分:1)
试试这个
SELECT *
FROM monthly_records
WHERE month IN (8,9,10,11,12) AND year IN (2017)
ORDER BY ID;
UNION / UNION ALL
SELECT *
FROM monthly_records
WHERE month IN (1) AND year IN (2018)
ORDER BY ID;
根据需要选择UNION / UNION ALL。
或
没有UNION / UNION ALL
SELECT * FROM monthly_records WHERE (month >= 8 AND year = 2017) or (month = 1 AND year = 2018) ORDER BY ID;