首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

求一高效,复杂唯一值SQL语句(数据库500万),该怎么解决

2012-03-08 
求一高效,复杂唯一值SQL语句(数据库500万)表如下iddzmemo----------------1东大街02东大街13东大街14东大

求一高效,复杂唯一值SQL语句(数据库500万)
表如下
id         dz         memo
----------------
1       东大街       0
2       东大街       1
3       东大街       1
4       东大街       0
5       西大街       0
6       西大街       1
7       西大街       0
8       南大街       0
9       南大街       0
10       南大街       0

.....
memo字段不为0就为1
数据库大概500万  
要求:
相同地址memo都为0,取id最大的那一条
要是相同地址中有memo为1的
取memo为1的且id最大的那一条

结果应如下
id         dz         memo
----------------
3       东大街       1
6       西大街       1
10       南大街       0
.....

求此解

[解决办法]
请试一试:

CREATE CURSOR TEST (ID I, Dz VARCHAR(20), Memo I)

INDEX ON Memo TAG Memo
INDEX ON Dz TAG Dz

SYS(3054,2)
SYS(3054,12)

CLEAR

INSERT INTO TEST VALUES (1, "东大街 ",0)
INSERT INTO TEST VALUES (2, "东大街 ",1)
INSERT INTO TEST VALUES (3, "东大街 ",1)
INSERT INTO TEST VALUES (4 , "东大街 ",0)
INSERT INTO TEST VALUES (5 , "西大街 ",0)
INSERT INTO TEST VALUES (6, "西大街 ",1)
INSERT INTO TEST VALUES (7, "西大街 ",0)
INSERT INTO TEST VALUES (8, "南大街 ",0)
INSERT INTO TEST VALUES (9, "南大街 ",0)
INSERT INTO TEST VALUES (10, "南大街 ",0)

BROWSE

SELECT MAX(ID),Dz,1 AS Memo ;
FROM Test ;
GROUP BY Dz ;
WHERE Memo = 1 ;
INTO CURSOR Temp1 ReadWrite

INSERT INTO Temp1 ;
SELECT MAX(ID),Dz,0 AS Memo ;
FROM Test ;
GROUP BY Dz ;
WHERE Memo = 0 AND Dz NOT IN (SELECT Dz FROM Temp1)

BROWSE

最好能告知500万条需要多长时间.
[解决办法]
select a.* from (
SELECT dz,max(id),0 from ttpo where memo=0 group by dz) a
left join
(SELECT dz,max(id),0 from ttpo where memo=1 group by dz) b
on a.dz=b.dz
where isnull(b.dz)
union
select b.* from (
SELECT dz,max(id),1 from ttpo where memo=0 group by dz) a
right join
(SELECT dz,max(id),1 from ttpo where memo=1 group by dz) b
on a.dz=b.dz
where not isnull(a.dz)
to fred2104():用IN的效率低,速度慢
[解决办法]
use 原表
index on dz+str(memo-1)+str(50000000-id) to ls
total on dz to 目标表 fields dz

热点排行