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就可以快速实现。
开始表演
CREATETABLE
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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)