如何根据其他值选择日期范围

时间:2014-04-29 07:51:41

标签: sql date range

我有一个包含标识符,日期和有效位的表。

ID | Date       |  SalesID | InValid
   |            |          |
1  | 2013-08-01 |    2     |  False
2  | 2013-08-01 |    3     |  False
3  | 2013-08-01 |    4     |  False
4  | 2013-08-01 |    5     |  False
5  | 2013-08-02 |    2     |  False
6  | 2013-08-02 |    3     |  False
7  | 2013-08-03 |    2     |  True
8  | 2013-08-03 |    3     |  False
9  | 2013-08-03 |    4     |  False

ID是唯一编号 每个SalesID只有一个日期条目

我的问题是如何在过去30天内选出任何Invalid = true的SalesID的ID号。

因此,对于SalesID = 2,我想要加上前30天内的任何其他日期

ID | Date       |  SalesID | InValid
   |            |          |
1  | 2013-08-01 |    2     |  False
5  | 2013-08-02 |    2     |  False
7  | 2013-08-03 |    2     |  True

我希望这是有道理的。欢迎任何帮助

谢谢大家,非常快速的帮助,我还有很多需要学习的地方。我欠你的债

1 个答案:

答案 0 :(得分:1)

我认为这就是你所需要的:

SELECT DISTINCT a.*
FROM table a
JOIN table b ON
  b.SalesID=a.SalesID AND
  b.InValid           AND
  a.Date >= b.Date-30 AND
  a.Date <= b.Date

注意......日期数学可能取决于您使用的SQL引擎,以及日期列的实际数据类型。