【问题标题】:sql sum sales between datesql sum 日期之间的销售额
【发布时间】:2018-05-06 07:17:07
【问题描述】:

图片说明了一切。我的目标是使用sql到最后一张表。

我会用一个例子来解释逻辑。

表 1 显示了预期销售额。例如,第 22 条应仅在 1 月 1 日至 1 月 4 日之间出售。为简单起见,我们假设商店每天都营业。

表 2 显示了每篇文章的每日销售额。例如文章在 1 月 2 日 3 月 4 日 售出。但是,对于第 22 条,4 janv 不在 [1 janv 到 3 janv] 范围内。因此,要获得第 22 条的销售额总和,我们应该省略 1 月 4 日。所以第22条的计算是2+4+5=11。

数据类型

表 1

  • 艺术编号:int
  • 从:日期
  • planned_to:日期

表 2

  • 艺术编号:int
  • 天:日期
  • 销售额:浮动

【问题讨论】:

  • 以文本形式发布表格和数据READ THIS
  • 别偷懒,解释一下逻辑。我们没有时间解码您的代码并猜测您需要什么。
  • 奇怪的日期格式。列数据类型?
  • 标记您正在使用的 dbms。在日期/时间方面,许多产品远不符合 ANSI SQL。
  • 你试过什么?向我们展示您当前的查询尝试。

标签: sql date sum range ansi-sql


【解决方案1】:

类似这样的:

SELECT
    t1.artNo
    , t1.[from]
    , t1.planned_to
    , SUM(t2.sales) total
FROM
    table1 t1
    JOIN table2 t2 ON
        t1.artNo = t2.artNo
        AND t2.day >= t1.[from]
        AND t2.day <= t1.planned_to
GROUP BY
    t1.artNo
    , t1.[from]
    , t1.planned_to

【讨论】:

  • 这是不正确的......最后一行不会出现在结果中
  • @Valerica 为什么不这样做?
  • @JuanCarlosOropeza '因为我做了同样的事情,我的结果没有带来最后一行......但在我的代码中,不同之处在于我将 4 Apr 和 7 Apr 放在表中而不是4 月 4 日和 07 日。前导零正在工作
  • 那么问题出在日期格式上。如果字段是日期,查询应该可以正常工作
  • 我更新了帖子,确实格式应该是DATE。
【解决方案2】:
SELECT t1.artNO
    ,t1.
    ,t1.planned_to
    ,SUM(sales) as Total
FROM table1 t1
INNER JOIN table2 t2 ON t1.artNo = t2.artNo
GROUP BY t1.artNO
    ,t1.
    ,t1.planned_to

【讨论】:

  • 无论如何这都不处理日期范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2021-12-27
相关资源
最近更新 更多