选择条件在 SQL 中的每第 n 行
Selecting every nth row with a condition in SQL
这似乎是一个概念上很简单的问题,但没有直接的答案。
我有一些时间紧迫的数据,event_ID 变量给出了一大堆(数百万)独特事件,描述了一组(几个)物理属性(phys_props)。
我正在写 SQL 并希望 return 为这个时间序列数据集的每第 n 行(我可以自由选择 n 为例如 5、1000、10000 等) .
但是,如果n=1000 并且给定物理 属性 的记录少于 1000 条,我根本不想 return 那里的 event_ID 记录。
类似于:
SELECT *
FROM myTable
WHERE MOD(myTable, 1000) = 0
是我的起点。
你可以给每行一个唯一编号,然后对唯一编号进行计算。像这样
with t as(
select *,row_number() over (order by event_ID) SN from the_table_name
)
select * from t where SN%100=0
您可以尝试这样的操作:
SELECT * FROM
(SELECT EVENT_ID,
@rownum := @rownum + 1 AS rank
FROM myTable,
(SELECT @rownum := 0) r
) ds
WHERE MOD(rank, 5) = 0
;
你可以试试这个:
Select * from myTable
Having mod(count(*), 1000)=0
这似乎是一个概念上很简单的问题,但没有直接的答案。
我有一些时间紧迫的数据,event_ID 变量给出了一大堆(数百万)独特事件,描述了一组(几个)物理属性(phys_props)。
我正在写 SQL 并希望 return 为这个时间序列数据集的每第 n 行(我可以自由选择 n 为例如 5、1000、10000 等) .
但是,如果n=1000 并且给定物理 属性 的记录少于 1000 条,我根本不想 return 那里的 event_ID 记录。
类似于:
SELECT *
FROM myTable
WHERE MOD(myTable, 1000) = 0
是我的起点。
你可以给每行一个唯一编号,然后对唯一编号进行计算。像这样
with t as(
select *,row_number() over (order by event_ID) SN from the_table_name
)
select * from t where SN%100=0
您可以尝试这样的操作:
SELECT * FROM
(SELECT EVENT_ID,
@rownum := @rownum + 1 AS rank
FROM myTable,
(SELECT @rownum := 0) r
) ds
WHERE MOD(rank, 5) = 0
;
你可以试试这个:
Select * from myTable
Having mod(count(*), 1000)=0