mysql 如果查询 相同 ID 的 某数据 后面5个数据

mysql 如果查询 相同 ID 的 某数据 后面5个数据,第1张

语句如下:

drop procedure if exists test

create procedure test(num int)

begin

drop table if exists tmp

create temporary table tmp(id int,v1 varchar(5),v2 varchar(5))

set @done=0

repeat

if (select v1 from d where id=num)='x' then

insert into tmp select * from d where id=num

set @done=@done+1

set num=num+1

else

set num=num+1

end if

until @done>=3

end repeat

select * from tmp

end

call test(3)

思路:

假设3列的列名为id,v1,v2,表名为d,先建立一个临时表tmp,再对d表进行if查询并且从id=3的条件开始,如果该行符合v1=x条件则插入临时表tmp并将done+1,不如符合则将id+1(也就是查询下一行),当插入了符合条件的数量>=3后结束循环并显示tmp表的内容。

写在前面

最近数据表新增了两个搞事情的字段,近一个月id,近一个月出现的次数。通过mysql就可以快速实现。

开始表演

CREATE

TABLE

A

(

a_id

INT,

a_name

VARCHAR(10),

a_con

VARCHAR(10)

)

CREATE

TABLE

B

(

b_id

INT,

b_name

VARCHAR(10),

a_id

INT

)

INSERT

INTO

A

SELECT

1,

'a1',

'a11'

UNION

ALL

SELECT

2,

'a2',

'a22'

INSERT

INTO

B

SELECT

1,

'b1',

1

UNION

ALL

SELECT

2,

'b2',

2

UNION

ALL

SELECT

3,

'b3',

2

以上为测试表。测试数据

以下为查询语句与结果:

SELECT

A.*

FROM

A,

(

SELECT

a_id,

Count(1)

as

aCount

FROM

B

GROUP

BY

a_id

)

tmp

WHERE

A.a_id

=

tmp.a_id

ORDER

BY

tmp.aCount

DESC

+------+--------+-------+

|

a_id

|

a_name

|

a_con

|

+------+--------+-------+

|

2

|

a2

|

a22

|

|

1

|

a1

|

a11

|

+------+--------+-------+

2

rows

in

set

(0.00

sec)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6144567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存