我不知道如何写一个查询:
给定具有X(批次)记录的此数据:
| ID|活动|日期|
| --------------|--------------|--------------|
| 一一一|S|2023/04/10|
| 二二二二|M|2023/04/11|
| 三三三三|S|2023/04/10|
| 一一一|M|2023/04/11|
| 三三三三|M|2023/04/11|
| 四四四四|S|2023/04/11|
| 五五五五|M|2023/04/10|
| 五五五五|M|2023/04/11|
仅返回具有“活动”状态的最新(按日期)记录:“M”,其不具有具有状态“S”的先前记录(在另一日期中,来自过去或同一天)。
如你所见,ID:
- 1111 --〉是X记录,具有S和M活动
- 2222 --〉只有一条记录,具有M个活动
- 3333 --〉x记录是否具有S和M活动
- 4444 --〉只有一条记录,活动为S
- 5555 --〉x个记录是否只有M个活动
所以我希望看到的结果是:
- 2023年4月11日2222
- 2023年4月11日5555
简而言之:我尝试只查找有“M”活动的记录,没有“S”活动的记录,并使用日期选择最新的记录。
提前谢谢你卢卡
我试着从Activity = 'M'的表中选择一个不同的ID,但这不能保证在过去的几天里,对于同一个ID,没有Activity = 'S'的记录。
我也试着通过ID来考虑一个组,但同样的,我不能保证所选的记录在另一个日期没有以前的记录,在过去的日子里有活动“S”。
4条答案
按热度按时间0x6upsns1#
您可以使用分析函数查找最新的行,并检查之前是否有
S
活动,以便您只查询一次表:其中,对于样本数据:
输出:
| ID|活动|DT|
| --------------|--------------|--------------|
| 二二二二|M|2019 -04-11 00:00:00|
| 五五五五|M|2019 -04-11 00:00:00|
fiddle
vdgimpew2#
这里有一个选择
(Just设置日期格式,知道什么是什么;从您发布的数据中不清楚,例如2023/04/10可以是4月10日以及10月4日)。
样本数据:
查询从这里开始;
temp
CTE按datum
的每一个ID
对所有行(对于没有活动S
的ID
)进行降序排序:最后,返回排名最高的行:
68bkxrlz3#
假设'M'〈'S'
mlnl4t2r4#
还有一个: