如何查找两个不同年份和月份之间的记录?

问题描述 投票:0回答:2

我试着找到2个不同年份和月份之间的记录,但我的查询不起作用。这是我的查询:

SELECT product_class.sublevel AS producttype, COUNT(*) AS totalclass
FROM vtiger_classes
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_classes.classesid AND vtiger_crmentity.deleted = 0
    INNER JOIN
    (SELECT vtiger_product.productid, vtiger_product.sublevel_1 FROM vtiger_product
     INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_product.productid AND vtiger_crmentity.deleted = 0) AS product_class
     ON product_class.productid = vtiger_classes.Product
WHERE 1 BETWEEN MONTH(vtiger_classes.start_date) and MONTH(vtiger_classes.end_date)
AND 2019 BETWEEN YEAR(vtiger_classes.start_date) and YEAR(vtiger_classes.end_date)
GROUP BY product_class.sublevel
php mysql
2个回答
1
投票

例如,从2017年1月到2018年至12月期间的所有订单:

WHERE order_date >= CAST('2017-01-01' AS DATE)
AND order_date < CAST('2019-01-01' AS DATE);

要么:

WHERE order_date >= CAST('2017-01-01' AS DATE)
AND order_date <= CAST('2018-12-31' AS DATE);

0
投票

您的数据和代码的简化版本; -

drop table if exists t;
create table t
(id int auto_increment primary key, start_dt date, end_dt date);
insert into t (start_dt,end_dt) values
('2018-10-01','2019-03-01'),
('2018-12-31','2019-03-01'),
('2019-01-01','2019-03-01'),
('2019-01-01','2019-02-01'),
('2019-02-28','2019-03-01');

select t.*
from t
where 1 BETWEEN MONTH(start_dt) and MONTH(end_dt)
AND 2019 BETWEEN YEAR(start_dt) and YEAR(end_dt) ;

结果

+----+------------+------------+
| id | start_dt   | end_dt     |
+----+------------+------------+
|  3 | 2019-01-01 | 2019-03-01 |
|  4 | 2019-01-01 | 2019-02-01 |
+----+------------+------------+
2 rows in set (0.00 sec)

这是预期的(和工作)

更改代码以使用日期

select t.*
from t
where (start_dt between '2018-12-31' and '2019-03-01') and
        (end_dt between '2018-12-31' and '2019-03-01');

结果

+----+------------+------------+
| id | start_dt   | end_dt     |
+----+------------+------------+
|  2 | 2018-12-31 | 2019-03-01 |
|  3 | 2019-01-01 | 2019-03-01 |
|  4 | 2019-01-01 | 2019-02-01 |
|  5 | 2019-02-28 | 2019-03-01 |
+----+------------+------------+
© www.soinside.com 2019 - 2024. All rights reserved.