选择日期路口
我有这个表选择日期路口
+------+--------+-------------------------+
| id | amount | start_date | end_date |
| 10 | 10 | 2012-01-15 | 2012-01-20 |
| 10 | 12 | 2012-01-14 | 2012-01-15 |
| 10 | 22 | 2012-01-15 | 2012-01-16 |
+------+--------+-------------------------+
我会想找到一个给定的区间的总和。
实施例:
开始日期:2012-01-13
结束日期:2012-01-18
总和(量)= 44
开始日期:2012-01- 18
结束日期:2012-01-21
总和(量)= 10
是,可能使用单个查询?
这是可能的吗?
EDIT
背后的逻辑是,如果intevarls(给定的一个和在表内)重叠,我应该得到的行。
SELECT SUM(amount)
FROM TableX
WHERE start_date <= @EndDate
AND @StartDate <= end_date
其中@StartDate
和@EndDate
你想与检查的日期。
+1:这是绝对正确的。但我会添加一些额外的东西。如果你有'start_date,end_date'的索引,你实际上只能从'start_date'部分受益。并且,您只需指定'start_date = @startDate - (longestPeriod)'。在大型数据集中,这可以大量减少正在检查的记录数。这导致我在这种类型的模式中执行最大持续时间,然后有多个记录来表示较长的时间段。 – MatBailie 2012-01-13 14:28:51
我已经尝试过这个解决方案,它没有工作..你知道为什么吗?我忘了报价日期!我笨...... :) – tampe125 2012-01-13 14:39:34
@Dems:不错。这种两种(或更多)的范围条件始终难以优化。我想加入AND(@ StartDate-longestPeriod) 2012-01-14 07:55:54
SELECT SUM(额),表,其中起始日期> '2012-01-13' 日期和结束日期< '2012-01-18'
当然,你可以这样做:
select sum(amount) from my_dates where start_date >= '2012-01-13' and end_date <= '2012-01-18'
给你34.如果你想获得44你会怎么做:
select sum(amount) from my_dates where start_date >= '2012-01-13' and end_date <= '2012-01-20'
希望这有助于
SELECT SUM(`amount`) as TotalAmount
FROM `tableName`
WHERE (start_date >= '2012-01-13 00:00:00'
AND
end_date <= '2012-01-18 23:59:59')
任何事情都可能,如果你相信!其实,你能否在这里详细介绍一下?像你这样的请求_sounds_要去_inclusive_集合,但是这些例子显示了其他情况。 – 2012-01-13 14:05:17
谁低估了,为什么?没有评论为什么,你期望达到什么目的? – MatBailie 2012-01-13 14:29:30
@Dems感谢upvote:P – tampe125 2012-01-13 14:40:10