sql求助

取近30天中的每一天销量前三的产品,sql怎么写?

举个例:

22号销量前三产品为A、B、C

21号销量前三产品为B、D、E

20号销量前三产品为A、D、E...

用户PdBD63555554 发布于 2022-6-22 17:05 (编辑于 2022-6-22 17:15)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共8回答
最佳回答
0
kindly qiLv5初级互助
发布于2022-6-22 17:21(编辑于 2022-6-22 17:23)

窗口函数:日期分组,销量降序,取每日排名前3

select   *   from 

(

select  * ,

row_number()  over(partition by 日期,order by 销量  desc )px

from  table

) k

where k.px <=3

最佳回答
0
浪兔Lv7初级互助
发布于2022-6-22 17:06

倒序取前七个不就可以了。

最佳回答
0
AUUUUUUULv5见习互助
发布于2022-6-22 17:08

select top 7 from 表 where  日期 = getdate() - 30

  • 用户PdBD63555554 用户PdBD63555554(提问者) 你这个是30天前的前七条数据
    2022-06-22 17:17 
  • AUUUUUUU AUUUUUUU 回复 用户PdBD63555554(提问者) between getdate() - 30 and getdate()
    2022-06-22 17:29 
最佳回答
0
Qian0Lv3见习互助
发布于2022-6-22 17:22

SELECT 产品字段 ,count(产品字段)num  FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名) GROUP BY 产品字段 ORDER BY num  limit 7  

--

不同的数据库top 7  的函数不一样

最佳回答
0
用户c1237571Lv3见习互助
发布于2022-6-22 17:28

SELECT rq,num

from (SELECT rq,num,ROW_NUMBER() OVER(PARTITION BY rq ORDER BY num DESC) paixu

from(SELECT '0301' rq,1 num

union all

SELECT '0301',1

union all

SELECT '0302',3

union all

SELECT '0302',4

union all

SELECT '0303',1

union all

SELECT '0303',2

union all

SELECT '0304',3

union all

SELECT '0304',4)a)b

where paixu<2

最佳回答
0
AmyQLv6初级互助
发布于2022-6-22 17:32

SELECT 日期字段,GROUP_CONCAT(产品字段)  from(

select ROW_NUMBER() OVER(PARTITION BY 日期字段,产品字段 ORDER BY all_count desc) ID,日期字段,产品字段,count(产品字段) all_count  FROM 表名 

where 日期字段>=DATE_SUB(CURDATE(), INTERVAL 30 DAY)

 GROUP BY 日期字段,产品字段)A 

where ID<=3

group by 日期字段

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-6-23 08:58(编辑于 2022-6-23 09:35)

数据库是:SqlServer?oracle?mysql?

SELECT * FROM (

SELECT  ROW_NUMBER() OVER(PARTITION BY 日期 ORDER BY 销量 DESC) [I],* FROM TABLE WHERE 日期>=DATEADD(DAY,-30,GETDATE()) ) T WHERE T.I<=3

最佳回答
0
wuyongssLv2见习互助
发布于2022-6-23 11:00

SELECT

RQ,

WM_CONCAT ( ID ) 

FROM

(

SELECT

ROW_NUMBER ( ) OVER ( PARTITION BY TRUNC( DATE, 'DD' ) ORDER BY SUM( QTY ) DESC ) XH,

TRUNC( DATE, 'DD' ) RQ,

ID,

SUM( QTY ) SHUL 

FROM

MX 

WHERE

TRUNC( SYSDATE, 'DD' )-TRUNC( DATE, 'DD' ) <=30

GROUP BY

ID,

TRUNC( DATE, 'DD' ) 

ORDER BY

TRUNC( DATE, 'DD' ),

SUM( QTY ) DESC 

WHERE

XH <= 3 

GROUP BY

RQ

  • 8关注人数
  • 576浏览人数
  • 最后回答于:2022-6-23 11:00
    请选择关闭问题的原因
    确定 取消
    返回顶部