返回介绍

solution / 2200-2299 / 2292.Products With Three or More Orders in Two Consecutive Years / README_EN

发布于 2024-06-17 01:03:07 字数 2951 浏览 0 评论 0 收藏 0

2292. Products With Three or More Orders in Two Consecutive Years

中文文档

Description

Table: Orders

+---------------+------+
| Column Name   | Type |
+---------------+------+
| order_id    | int  |
| product_id  | int  |
| quantity    | int  |
| purchase_date | date |
+---------------+------+
order_id contains unique values.
Each row in this table contains the ID of an order, the id of the product purchased, the quantity, and the purchase date.

 

Write a solution to report the IDs of all the products that were ordered three or more times in two consecutive years.

Return the result table in any order.

The result format is shown in the following example.

 

Example 1:

Input: 
Orders table:
+----------+------------+----------+---------------+
| order_id | product_id | quantity | purchase_date |
+----------+------------+----------+---------------+
| 1    | 1      | 7    | 2020-03-16  |
| 2    | 1      | 4    | 2020-12-02  |
| 3    | 1      | 7    | 2020-05-10  |
| 4    | 1      | 6    | 2021-12-23  |
| 5    | 1      | 5    | 2021-05-21  |
| 6    | 1      | 6    | 2021-10-11  |
| 7    | 2      | 6    | 2022-10-11  |
+----------+------------+----------+---------------+
Output: 
+------------+
| product_id |
+------------+
| 1      |
+------------+
Explanation: 
Product 1 was ordered in 2020 three times and in 2021 three times. Since it was ordered three times in two consecutive years, we include it in the answer.
Product 2 was ordered one time in 2022. We do not include it in the answer.

Solutions

Solution 1

# Write your MySQL query statement below
WITH
  P AS (
    SELECT product_id, YEAR(purchase_date) AS y, COUNT(1) >= 3 AS mark
    FROM Orders
    GROUP BY 1, 2
  )
SELECT DISTINCT p1.product_id
FROM
  P AS p1
  JOIN P AS p2 ON p1.y = p2.y - 1 AND p1.product_id = p2.product_id
WHERE p1.mark AND p2.mark;

Solution 2

# Write your MySQL query statement below
WITH
  P AS (
    SELECT product_id, YEAR(purchase_date) AS y
    FROM Orders
    GROUP BY 1, 2
    HAVING COUNT(1) >= 3
  )
SELECT DISTINCT p1.product_id
FROM
  P AS p1
  JOIN P AS p2 ON p1.y = p2.y - 1 AND p1.product_id = p2.product_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文