sql - SQL 查询最近 7 天日期前 3 名的售罄产品
问题描述
我想要上周售罄的前 3 件产品。
这是我的 sql 查询。
select ProductId,sum(Quantity) as quantity,createdOn from
(SELECT inv.Id,invd.ProductId, invd.Quantity ,cast (inv.CreatedOn as date) as createdOn FROM Invoice as inv
INNER JOIN
InvoiceDetail invd
ON
invd.InvoiceId = inv.id
WHERE inv.CreatedOn >= DATEADD(day,-11117, GETDATE()) ) as tbl
group by createdOn , ProductId
ORDER BY createdOn DESC
但我没有得到每个日期前 3 名的产品。如果我使用前 3 名,那么它只会提供前 3 名产品,而我想要上周每天前 3 名的产品。
解决方案
如果我理解正确,您可以使用Row_number
windows功能来获得quantity
每天前 3 名。
createdon
每天制作行号,根据列quantity
从高到低的顺序。
;WITH CTE AS(
SELECT productid,quantity,createdon,Row_number() over(partition by createdon ORDER BY quantity DESC,productid DESC) as RN
FROM
(
SELECT invd.productid,
sum(invd.quantity) as quantity,
cast(inv.createdon AS date) AS createdon
FROM invoice AS inv INNER JOIN invoicedetail invd
ON invd.invoiceid = inv.id
WHERE inv.createdon >= dateadd(day,-11117, getdate())
GROUP BY cast(inv.createdon AS date), invd.productid
) AS tbl
)
SELECT *
FROM CTE
WHERE RN <= 3
[结果]:
| productID | quantity | createdon | rn |
|-----------|----------|------------|----|
| 94 | 7 | 2018-07-25 | 1 |
| 1119 | 2 | 2018-07-25 | 2 |
| 1115 | 2 | 2018-07-25 | 3 |
| 94 | 4 | 2018-07-26 | 1 |
| 1117 | 2 | 2018-07-26 | 2 |
| 1114 | 2 | 2018-07-26 | 3 |
推荐阅读
- python - AttributeError:类型对象“TFLiteConverterV2”没有属性“from_keras_model_file”
- hadoop - 如何通过ambari将组路由到特定的纱线队列?
- angular - 从单个堆栈栏的每个部分获取单击的对象,因为我的堆栈栏有多个部分 Chart.js
- android - 如何在 android studio 中使用 .tflite 模型进行图像分类
- c++ - Cmake:为 MSVC (Visual C++) 分别设置 C 和 C++ 代码的警告级别
- swagger - 如何在 OpenAPI 2.0 中定义像“2020 年 1 月 22 日”这样的日期?
- cloudflare-apps - 如何根据 js 对象更新 CloudFlare App 中的下拉列表?
- javascript - 为大于 2KB 的键创建索引
- javascript - navigator.mediaDevices.getUserMedia 在桌面和 Android 上运行良好,但在 IOS 移动设备上抛出错误
- ansible-2.x - 通过 ansible2.9 自动化 JX 安装过程