在我的项目中,我使用了一个名为"Compensation“的表格,就像.....
+--------------------------------------------------------------+
| Id | receiver_Id | compensation | date |
|--------------------------------------------------------------|
| 1 | 5 | 50% | 2011-02-15 12:15:00 |
| 2 | 3 | 40% | 2011-04-05 18:35:00 |
| 3 | 3 | 30% | 2011-04-25 06:24:00 |
| 4 | 5 | 45% | 2011-04-21 19:05:00 |
| 5 | 5 | 60% | 2011-04-30 12:05:00 |
.......................这里是date represents that the compensation is changed on that particular date。对于receiver 5,从the date 2011年2月15日12:15:01至2011年4月21日19:05:00`,补偿为50%before Feb 15 2011. And the compensation is45%。以此类推...
在这里,当我为receiver 5的月份日期创建invoice时,我必须使用compensation as 45% use 21 April 2011和for 22 April 2011 to 30 April 2011 I have to use 60%作为补偿...
但是如何获得一个月或两个日期之间的补偿,因为补偿可能在一个月内多次修改,如id4和5所示......
请帮我做上面的writing SQL,或者我不得不在table structure上做changes来使它变得简单......?
提前感谢
发布于 2011-04-26 15:59:27
当您的表同时跟踪有效起始日期和有效终止日期时,这会容易得多:
+--------------------------------------------------------------+---------------------+
| Id | receiver_Id | compensation | date_from | date_to |
|--------------------------------------------------------------|---------------------|
| 1 | 5 | 50% | 2011-02-15 12:15:00 | 2011-04-21 19:05:00 |
| 2 | 3 | 40% | 2011-04-05 18:35:00 | 2011-04-25 06:24:00 |
| 3 | 3 | 30% | 2011-04-25 06:24:00 | 0000-00-00 00:00:00 |
| 4 | 5 | 45% | 2011-04-21 19:05:00 | 2011-04-30 12:05:00 |
| 5 | 5 | 60% | 2011-04-30 12:05:00 | 0000-00-00 00:00:00 |
.......................然后您可以查询:
SELECT * FROM compensations
WHERE (date_to > $start_of_month OR date_to = 0 )
AND date_from < $end_of_month;发布于 2011-04-26 16:08:36
实际上,日期列看起来更像是日期-时间类型,而不是日期类型,而是:
select * from yourtable where date between 'yourfirstdate' and 'yourlastdate'但是,请注意,如果您在日期中指定了窄间隔,那么您的查询将不会返回任何结果(即使使用Sander Marechal原始解决方案),因此更好的选择是检查较大的间隔或始终查询10个最新的行,并在代码级应用日期过滤。
发布于 2011-04-26 16:24:38
第一个sql将获取当前月/年
第二个sql显示它使用特定的月/年进行了硬编码
SELECT * FROM compensations
WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW());
SELECT * FROM compensations
WHERE YEAR(date) = '2011' AND MONTH(date) = '4';https://stackoverflow.com/questions/5787353
复制相似问题