【问题标题】:How to select data with some of between in sql server 2008?如何在 sql server 2008 中选择一些介于两者之间的数据?
【发布时间】:2014-12-20 04:56:09
【问题描述】:

如果我有两张桌子。一个是sales表,一个是event表。

销售表:

Date        Item   Qty
2014-10-01     A     2
2014-10-01     B     3
2014-10-05     A     5
2014-10-10     A     2
2014-10-11     A     2
2014-10-19     A     3
2014-10-19     B     6
2014-10-25     A     2
2014-10-25     B     1
2014-10-30     B     4

和事件表:

Event       Begin_Date     End_Date
Holiday     2014-10-01     2014-10-03
Holiday     2014-10-10     2014-10-13
Month Sale  2014-10-29     2014-10-30

如何只选择活动期间的销售额?

例如,假日事件的结果是这样的:

Date        Item   Qty
2014-10-01     A     2
2014-10-01     B     3
2014-10-10     A     2
2014-10-11     A     2

【问题讨论】:

  • sales表有没有主键?如果有,是什么?
  • sales表的主键是日期和商品。
  • 为什么2014-10-05 没有出现在结果中?
  • @Ullas 因为那个日期不在任何假期范围内!

标签: sql-server sql-server-2008 select sql-server-2008-r2 between


【解决方案1】:

加入日期

SELECT S.*
FROM Event E
JOIN Sales S on S.Date Between E.Begin_Date and E.End_Date
where E.Event='Holiday'

--编辑 如果您有重叠事件,则必须使用 distinct 关键字:

SELECT DISTINCT S.*
FROM Event E
JOIN Sales S on S.Date Between E.Begin_Date and E.End_Date
where E.Event='Holiday'

【讨论】:

  • 如果您有重叠事件,那么这将返回重叠事件的多个结果,但一个简单的 distinct 会处理该查看编辑
【解决方案2】:

几分钟前某人发布的答案被他自己删除了。我检查了它是否正常工作。 (除了不同的关键字,答案相同)

  SELECT a.*
    FROM   #sales a
           JOIN #event b
             ON a.mydate BETWEEN b.begin_date AND b.end_date
    WHERE  b.event = 'Holiday' 

【讨论】:

  • distinct 关键字对于处理重叠事件很重要
【解决方案3】:
SELECT * 
FROM SALES 
WHERE (DATE BETWEEN 
                   (SELECT BEGIN_DATE FROM EVENT) 
               AND 
                   (SELECT END_DATE FROM EVENT))
AND EVENT.EVENT = 'HOLIDAY'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多