如何获取特定数据的记录
Posted
技术标签:
【中文标题】如何获取特定数据的记录【英文标题】:How to fetch records up to particular data 【发布时间】:2021-10-01 06:31:41 【问题描述】:表tb数据如下
id remarks status key
------------------------------------
1 dfe 1 340
2 ert 4 340
3 aaa 6 340
4 gh 7 340
5 bnh 2 341
6 xdc 6 341
7 qqq 1 341
8 rty 3 343
9 mnh 1 343
10 ppo 3 343
11 oit 6 343
我想通过分组键获得状态 6 的 id 列表。
select id
from tb
where status in (6) AND key in (select key_list from temporary_table)
group by key;
我没有得到所需的记录。
例如:我需要如下输出
key 340
id
---
1
2
3
For key 341
id
---
5
6
For key 343
id
---
8
9
10
11
注意:原始键列数据不按顺序排列,是乱序的。为了便于理解给定的列表。
【问题讨论】:
如果给定键的状态从不为 6,那么期望的结果是什么?另外,当您说“for key ...”时,您是什么意思?那是一个输入变量(查询中的绑定变量),并且您一次需要一个键的结果集,还是需要查询返回单个结果集中所有键的行? 【参考方案1】:假设
-
您需要一个查询来返回一个中所有键的相应 ID
单个查询;
如果给定键的状态从不为 6,那么您必须返回所有
该键对应的行
您可以使用match_recognize
:
select key, id
from tb
match_recognize(
partition by key
order by id
all rows per match
pattern ( ^ a* b? )
define a as status != 6
);
如果您必须将单个输入键作为变量提供给查询,并仅返回该键的结果,您可以像这样修改查询:
select id
from (select id, status from tb where key = :input_key)
match_recognize(
order by id
all rows per match
pattern ( ^ a* b? )
define a as status != 6
);
【讨论】:
【参考方案2】:您可以使用相关子查询:
select tb.* -- or whatever columns you want
from tb
where tb.id <= (select min(tb2.id)
from tb tb2
where tb2.key = tb.key and tb2.status = 6
);
或者,您可以使用窗口函数:
select tb.id
from (select tb.*,
min(case when status = 6 then id end) over (partition by key) as id_6
from tb
) tb
where id <= id_6;
【讨论】:
以上是关于如何获取特定数据的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何从 firebase 实时数据库中获取数据并更改一个文本字段以表示该特定记录?
ExtJs分组中的clearfilter后如何获取特定组的所有记录
Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)
如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外