首页 > 数据库 >【LeetCode1384. 按年度列出销售总额】MySQL使用with recursive根据开始日期和结束日期展开为多行

【LeetCode1384. 按年度列出销售总额】MySQL使用with recursive根据开始日期和结束日期展开为多行

时间:2023-08-19 13:55:51浏览次数:38  
标签:LeetCode1384 product recursive sale sales 日期 year date id

题目地址

https://leetcode.cn/problems/total-sales-amount-by-year/description/

代码

WITH RECURSIVE DateSeries AS (
    SELECT product_id, period_start AS sale_date, period_end, average_daily_sales
    FROM Sales -- Assuming your table name is sales_data
    UNION ALL
    SELECT product_id, DATE_ADD(sale_date, INTERVAL 1 DAY), period_end, average_daily_sales
    FROM DateSeries
    WHERE sale_date < period_end
)

, YearlySales AS (
    SELECT 
        product_id,
        date_format(sale_date,"%Y") AS report_year,
        COUNT(DISTINCT sale_date) AS days_sold,
        SUM(average_daily_sales) AS total_amount
    FROM DateSeries
    GROUP BY product_id, YEAR(sale_date)
)

SELECT 
    y.product_id, 
    p.product_name, 
    y.report_year, 
    y.total_amount
FROM YearlySales y
JOIN Product p ON y.product_id = p.product_id -- Assuming there's a 'products' table with product_name
ORDER BY y.product_id, y.report_year;

标签:LeetCode1384,product,recursive,sale,sales,日期,year,date,id
From: https://www.cnblogs.com/yhm138/p/17642384.html

相关文章

  • 【LeetCode1225. 报告系统状态的连续日期】MySQL使用lag,lead得到连续段的:开始标志,结束
    目录题目地址题目描述代码题目地址https://leetcode.cn/problems/report-contiguous-dates/description/题目描述Asystemisrunningonetaskeveryday.Everytaskisindependentoftheprevioustasks.Thetaskscanfailorsucceed.Writeasolution toreportth......
  • 4.3 C++ Boost 日期时间操作库
    Boost库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质......
  • 4.3 C++ Boost 日期时间操作库
    Boost库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质......
  • Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间
    场景SpringBoot+Mybatis+定时任务实现大数据量数据分表记录和查询:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126225846通过以上分表实现的同结构不同表名之间的表,如何将一个表中的数据复制到另一个表中,且将日期字段进行同样的新增,时间字段不变。注:博客:ht......
  • 【LeetCode 571. 给定数字的频率查询中位数】WITH RECURSIVE实现Tally的逆操作
    目录题目地址代码题目地址https://leetcode.cn/problems/find-median-given-frequency-of-numbers/description/代码WITHRECURSIVERecCTEAS(SELECTnum,frequency-1asremaining_frequencyFROMNumbersWHEREfrequency>0UNIONALLSELECTn......
  • [Luogu P8716] 回文日期 题解
    STEP1:分析题目大意:给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。这一题一眼看出是P2010的升级版,所以要先考虑到超时问题,因为如果一天一天地枚举,时间复杂度会非常高,所以我们不能直接枚举。因为题目只要"回文",所以我们只......
  • C++11时间日期库chrono的使用
    chrono是C++11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration,time_point,clock。时钟与时间点chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应类型的时间点。clock时钟是从一个时点开始,按照某个刻度的计数;chrono同......
  • 1484. 按日期分组销售产品
    1484.按日期分组销售产品2023年8月14日09:49:541484.按日期分组销售产品简单SQLSchemaPandasSchema表Activities:+-------------+---------+|列名|类型|+-------------+---------+|sell_date|date||product|varchar|+---------......
  • Java字符串转日期,当前日期后几天,前几天
    首先代码实现//设置当前日期的后七天Calendarcalendar=Calendar.getInstance();calendar.setTime(newDate());//设置当前日期calendar.add(Calendar.DATE,7);//增加7天,更改这里的数量就行DatenewDate=calendar.getTime();//获取新日期SimpleDateFormatdf1......
  • 【pandas小技巧】--日期相关处理
    日期处理相关内容之前pandas基础系列中有一篇专门介绍过,本篇补充两个常用的技巧。1.多列合并为日期当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。合并多列转换为日期类型,可以直接用to_datetime函数来处理:importpandasaspddf......