当前位置: 首页 > 面试题库 >

如何按连续数据分组(在这种情况下为日期)

雍马鲁
2023-03-14
问题内容

我有一个products表和一个sales表,该表记录着给定产品在每个日期售出了多少个项目。当然,并非所有产品每天都有销售。

我需要生成一个报告,告诉我产品 连续 几天销售(从最新日期到过去),以及仅在那几天销售了多少物品。

我想告诉您到目前为止我已经尝试了多少方法,但是唯一成功(缓慢,递归)的方法是应用程序内部的解决方案,而不是SQL内部的解决方案,这就是我想要的。

我还浏览了关于SO的几个类似问题,但没有找到一个让我对我真正需要的东西有清晰认识的问题。

我在这里设置了一个SQLFiddle来向您展示我在说什么。在这里,您将看到我能想到的唯一查询,但没有得到我需要的结果。我还在那里添加了注释,以显示查询结果。

我希望这里的人知道如何做到这一点。预先感谢您的任何评论!

弗朗西斯科


问题答案:

http://sqlfiddle.com/#!2/20108/1

这是完成工作的存储过程

CREATE PROCEDURE myProc()
BEGIN
    -- Drop and create the temp table
    DROP TABLE IF EXISTS reached;
    CREATE TABLE reached (
    sku CHAR(32) PRIMARY KEY,
    record_date date,
    nb int,
    total int)
   ENGINE=HEAP;

-- Initial insert, the starting point is the MAX sales record_date of each product
INSERT INTO reached 
SELECT products.sku, max(sales.record_date), 0, 0
FROM products
join sales on sales.sku = products.sku
group by products.sku;

-- loop until there is no more updated rows
iterloop: LOOP
    -- Update the temptable with the values of the date - 1 row if found
    update reached
    join sales on sales.sku=reached.sku and sales.record_date=reached.record_date
    set reached.record_date = reached.record_date - INTERVAL 1 day, 
        reached.nb=reached.nb+1, 
        reached.total=reached.total + sales.items;

    -- If no more rows are updated it means we hit the most longest days_sold
    IF ROW_COUNT() = 0 THEN
        LEAVE iterloop;
    END IF;
END LOOP iterloop;

-- select the results of the temp table
SELECT products.sku, products.title, products.price, reached.total as sales, reached.nb as days_sold 
from reached
join products on products.sku=reached.sku;

END//

那你只需要做

call myProc()


 类似资料:
  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码:

  • 事件处理程序添加到GameGui.java类的GridPane中,从第82行开始。 基本上,我试图找到您在网格窗格中拖动这个对象的任何节点的索引。通过将SetonMouseEnter应用到gridpane中的每个节点,我可以在不拖动的情况下完成这一任务,但是当我试图利用SetonMouseDragEnter时,我什么也没有得到。 有人有办法让这个工作吗? 这些是我应用于GridPane中节点的事件

  • 问题内容: 当前,当我发出此SQL时,它将获得不同的用户名。 我有一些不同的用户名,它们代表组,例如。 我想将所有其他用户名(恰好是数字)分组为一个组,例如 我可以实现以下目标吗? 编辑:从答案修改的查询 问题答案: @bfavaretto很好(对他+1),但是如果您不了解前缀或前缀不同,则可以使用类似以下内容的方法:

  • 在这种情况下是否可以避免ArrayIndexOutOfBoundsException??

  • 问题内容: 我是T-SQL命令的新手,所以我在SQL逻辑中找到了一个可以使用它并想要对其进行测试的地方,但无法弄清楚我应该如何使用它: 请提出正确的用法。谢谢! 问题答案: 您在帮助中了吗?这是一个简单的例子: