当前位置: 代码迷 >> VFP >> 求一高效,复杂唯一值SQL语句(数据库500万),该怎么解决
  详细解决方案

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

热度:3262   发布时间:2013-02-26 00:00:00.0
求一高效,复杂唯一值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
  相关解决方案