在我的数据库中,我以每周格式保存数据,例如start_date of week和end_date of week,我想显示每周数据的月度数据,但是如果任何一周在两个月都有,那么就会提出一个条件(26- 4-2013,2-5-2013),所以计算本周的数据,其中包含最长的工作日数。
答案 0 :(得分:1)
您需要在查询中检查两个条件
如果开始日期为> =“上个月的最后日期减去4天”
如果结束日期是< “下个月的第4天”
这应该提供相关数据。
答案 1 :(得分:0)
DROP TABLE IF EXISTS `data`;
CREATE TABLE `data` (
`id` int(11) NOT NULL,
`start_date` date DEFAULT NULL,
`end_date` date DEFAULT NULL,
`value` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我已根据您的上述示例插入了数据。如果样本数据不正确,请告诉我。
INSERT INTO `data` VALUES (1,'2013-03-01','2013-03-07',10),(2,'2013-03-08','2013-03-14',50),(3,'2013-03-15','2013-03-21',60),(4,'2013-03-22','2013-03-28',30),(5,'2013-03-29','2013-04-04',80),(6,'2013-04-05','2013-04-11',90),(7,'2013-04-12','2013-04-18',70),(8,'2013-04-19','2013-04-25',20),(9,'2013-04-26','2013-05-02',40);
检查end_date列的日期是否大于3,然后从end_date列中选择month,否则选择month 来自start_date专栏。
select if(day(end_date) > 3, month(end_date), month(start_date)) as monthname,sum(value)
from data
group by monthname
您可以在下个月看到id = 5。