2015年12月到期的报告将于2016年1月生成。已经有2016年1月的报名。如何从2016年12月开始排除2016年1月:
我的查询:
SELECT historyid, h.attend_date, h.amount_paid, p.groupdate, h.clientid, p.clientid
FROM history AS h
INNER JOIN participation AS p on p.clientid = h.clientid
WHERE h.clientid = 1
AND attend_date = groupdate
ORDER BY attend_date ASC,
historyid DESC
该查询提供:
+-----------+-------------+-------------+------------+----------+----------+
| historyid | attend_date | amount_paid | groupdate | clientid | clientid |
+-----------+-------------+-------------+------------+----------+----------+
| 52 | 2015-12-06 | 60 | 2015-12-06 | 1 | 1 |
| 56 | 2015-12-07 | 60 | 2015-12-07 | 1 | 1 |
| 60 | 2015-12-08 | 60 | 2015-12-08 | 1 | 1 |
| 65 | 2015-12-09 | 15 | 2015-12-09 | 1 | 1 |
| 78 | 2016-01-01 | 15 | 2016-01-01 | 1 | 1 |
| 83 | 2016-01-02 | 15 | 2016-01-02 | 1 | 1 |
+-----------+-------------+-------------+------------+----------+----------+
如何仅检索2015年12月的行?
答案 0 :(得分:2)
添加日期范围以限制查询:
SELECT historyid, h.attend_date, h.amount_paid, p.groupdate, h.clientid, p.clientid
FROM history AS h
INNER JOIN participation AS p on p.clientid = h.clientid
WHERE h.clientid = 1
AND attend_date = groupdate
AND attend_date < '2016-01-01'
AND attend_date >= '2015-12-01'
ORDER BY attend_date ASC,
historyid DESC
它只会在今年年初和去年12月份之前获取行数。
答案 1 :(得分:0)
有多种解决方案。
一个涉及NOT IN
语句来确定一系列错误值。在这种情况下2016年。
该表仅列出2015年12月和2016年1月的值。因此,此查询应仅返回12月份的那些。
SELECT historyid, h.attend_date, h.amount_paid, p.groupdate, h.clientid, p.clientid
FROM history AS h
INNER JOIN participation AS p on p.clientid = h.clientid
WHERE h.clientid = 1
AND attend_date = groupdate
AND YEAR(attend_date) NOT IN (2016)
ORDER BY attend_date ASC,
historyid DESC
但是还有其他多种方法可以达到完全相同的答案。
答案 2 :(得分:-2)
你可以这样做:
SELECT historyid, h.attend_date, h.amount_paid, p.groupdate, h.clientid, p.clientid
FROM history AS h
INNER JOIN participation AS p on p.clientid = h.clientid
WHERE h.clientid = 1
AND attend_date = groupdate
AND MONTH(attend_date) = 12
AND YEAR(attend_date) = 2015
ORDER BY attend_date ASC, historyid DESC