首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >涉及日期代码时的SQL连接

涉及日期代码时的SQL连接
EN

Stack Overflow用户
提问于 2013-07-19 05:32:09
回答 3查看 40关注 0票数 0

我对一件事很好奇。假设我有两个表,一个有销售和促销代码,另一个只有促销代码和属性。促销代码可以打开和关闭,但促销属性可以更改。表结构如下:

代码语言:javascript
复制
tblSales                    tblPromo
sale  promo_cd  date        promo_cd  attribute   active_dt  inactive_dt
  2     AAA    1/1/2013        AAA      "fun"      1/1/2013    1/1/3001
  3     AAA    6/2/2013        BBB      "boo"      1/1/2013    6/1/2013
  8     BBB     2/2/2013       BBB      "green"    6/2/2013    1/1/3001
  9     BBB     2/3/2013
  10    BBB     8/1/2013

请注意,这不是我的表/模式/设计。我不明白为什么他们不为属性的每个变化生成新的promo_cd,特别是当属性是我们想要测量的时候。不管怎么说,我正试着做一个像这样的表格:

代码语言:javascript
复制
sale  promo_cd   attribute
  2     AAA        fun
  3     AAA        fun
  8     BBB        boo
  9     BBB        boo
  10    BBB        green

到目前为止,我所做的唯一一件事就是创建一个内部连接(这会导致重复的记录),然后通过比较销售日期和促销活动/非活动日期进行筛选。但是,有没有更好的方法呢?我真的很好奇,因为这是一个相当大的数据集,我希望保持它的效率。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-19 05:44:15

这是我喜欢将过滤条件直接放入JOIN子句的情况之一。至少在我的脑海中,重复的记录永远不会出现在结果集中。剩下的WHERE子句用于实际的过滤条件。

代码语言:javascript
复制
Select s.sale, s.promo_cd, p.attribute
From tblSales s
  Inner Join tblPromo p 
    on s.promo_cd=p.promo_cd 
    and s.date between p.active_dt and p.inactive_dt
票数 1
EN

Stack Overflow用户

发布于 2013-07-19 05:45:04

假设我理解正确,您可以使用:

代码语言:javascript
复制
SELECT s.sale, s.promo_cd, p.attribute
    FROM tblSales s
    JOIN tblPromo p ON p.promo_cd = s.promo_cd AND s.date BETWEENp.active_dt and p.inactive_dt

这假设tblPromo日期永远不会重叠(考虑到他们选择的模式,这似乎是可能的)

票数 1
EN

Stack Overflow用户

发布于 2013-07-19 05:49:08

只需将日期添加到您的JOIN条件:

代码语言:javascript
复制
SELECT a.sale, a.promo_cd, b.attribute
FROM tblSales a
JOIN tblPromo b
   ON a.promo_cd = b.promo_cd
   AND a.date BETWEEN b.active_dt AND b.inactive_dt

演示:SQL Fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17734301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档