首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >想办法参加最新的约会吗?

想办法参加最新的约会吗?
EN

Stack Overflow用户
提问于 2013-05-22 19:22:18
回答 2查看 48关注 0票数 0

对不起,我甚至不知道如何命名这个问题,所以希望我能描述它。

我试图查询,要么使用联接,要么使用子查询,而有些东西就是没有点击。我的大脑正变得越来越肌肉发达。

所以,我有一张按日销售的桌子。

然后,我有一张表,表上列出了与销售相关的日期范围。

问题是,有可能有2-3个销售期重叠,该项目是相关的。但是,销售将永远不会有相同的结束日期,销售的结束日期是后期(或最高数字)将有该项目在这一期间的真实成本,如果有一个不同的成本在上一个时期重叠。

那么,,在这种结构的情况下,我能做什么来每天返回项目的成本呢?

代码语言:javascript
运行
复制
Item sales by date
-----------
itemID  |  Sales  | Date
---------------------------
1          $4.00    3/29
1          $5.00    4/1
1          $6,00    4/3
代码语言:javascript
运行
复制
Sale Periods and Item Costs
===========================
item ID | StartDate | EndDate  |  Cost In Period | PeriodID
-----------------------------------------------------------
1         3/27        4/2         $2.00            1
1         4/1         4/16        $1.90            2

你可以看到,销售额的4/1,似乎有两个成本,可能是相关的,我想使用的成本,从期间结束后。

所以结果是

代码语言:javascript
运行
复制
Item sales by date WITH COST
-----------
itemID  |  Sales  | Date | COST
--------------------------------
1          $4.00    3/29   $2.00
1          $5.00    4/1    $1.80
1          $6,00    4/3    $1.80
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-22 19:32:26

未经测试:这可能很接近

代码语言:javascript
运行
复制
SELECT ISBD.itemID, ISBD.Sales, ISBD.Date, SPIC.Cost
FROM ITemSalesByDate ISBD
LEFT JOIN  SalePeriodsandItemCosts SPIC
  ON SPIC.ItemID = ISBC.ItemID 
  AND SPIC.EndDate = 
   (SELECT max(SPIC2.ENDDATE) 
    FROM SalePeriodsandItemCosts SPIC2 
    WHERE SPIC2.ItemID = ISBD.ItemID)

不过,我所关心的问题之一是子查询的性能,简单地在salePeriodsandItemcosts上对最大项ID和组按其他值进行第二次连接可能会更快。

票数 1
EN

Stack Overflow用户

发布于 2013-05-22 19:43:28

假设这是SQLServer,请尝试:

代码语言:javascript
运行
复制
with cte as
(select s.itemID, s.Sales, s.[Date], c.[Cost in Period],
        row_number() over (partition by s.itemID, s.[Date] 
                           order by c.EndDate desc) rn
 from sales s
 join costs c 
   on s.itemID = c.[item ID] and s.Date between c.StartDate and c.EndDate)
select itemID, Sales, [Date], [Cost in Period]
from cte
where rn=1

SQLFiddle 这里.

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

https://stackoverflow.com/questions/16699983

复制
相关文章

相似问题

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