MySQL:如何从查询中排除某些日期?

时间:2016-01-23 04:44:42

标签: mysql

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月的行?

3 个答案:

答案 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