我有一个这样的表:
MY_TABLE
Id Name Brand Date
-- ---- ----- ------
1 ABC 1 18-09-2019
2 XYZ 1 19-09-2019
3 MNO 1 18-09-2019
4 ABC 1 19-09-2019
5 PQR 2 17-06-2020
6 MNO 1 19-03-2019
7 ABC 2 19-09-2019
我想以这样的方式编写查询:首先我需要基于Date
进行排序。根据该结果,我必须将count(Name)
排序为brand
。像这样
ID Name Count(Name) Brand date
--- ---- ---------- ------ -----
1 ABC 2 1 19-09-2019
2 XYZ 1 1 19-09-2019 // Eventhough count is less it came second because 19-09-2019 is latest than 19-03-2019
3 MNO 2 1 18-09-2019
答案 0 :(得分:4)
您可以group by name
进行汇总:
select
name,
count(*) counter,
max(brand) brand,
max(trunc(datee)) maxdate
from my_table
where brand = 1
group by name
order by maxdate desc, counter desc
我使用trunc(datee)
是因为您的日期(我们发现)包含时间部分。
请参见demo。
结果:
> NAME | COUNTER | BRAND | MAXDATE
> :--- | ------: | ----: | :--------
> ABC | 2 | 1 | 19-SEP-19
> XYZ | 1 | 1 | 19-SEP-19
> MNO | 2 | 1 | 18-SEP-19
答案 1 :(得分:1)
您必须首先使用group by创建计数,然后使用支持多个字段(逗号分隔)的顺序进行排序。一旦为计数赋予列别名,就可以按以下顺序使用该别名:
select name, brand, min(date), count(name) as NumRecords, min(id) as id
from my_table
group by name, brand
order by date, NumRecords
我添加了min(id),因为您似乎想显示最小id。
答案 2 :(得分:0)
我认为您想基于最近日期的最高计数来为每个名称/品牌对选择一行:
select t.*
from (select t.*,
row_number() over (partition by name, brand order by date desc, count desc) as seqnum
from t
) t
where seqnum = 1;
答案 3 :(得分:0)
这是您想要的吗?
SELECT MIN(ID), Name,
Count(Name), Brand, MIN(date) as
Date_MIN
From Table where Brand =1 Group by
Brand,Name
Order by Date_MIN desc,Count(Name)
Desc;
;
答案 4 :(得分:0)