我有一张名为" lane"具有以下属性。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim streng As String
Dim k As Long
Dim r As Long
k = Target.Column
r = Target.Row
If Cells(1, k) = "P" Then
If Cells(r, k) = "x" Then
Cells(r, 4) = "x"
Else
Cells(r, 4) = ""
End If
End If
End Sub
以下列的此表中有重复的行:origState,origRegion,destState,destRegion。我希望能够选择所有行JOINED到第一次出现的min(id)。
例如,数据:
1 ALL MA ALL OH 2 ALL MA ALL OH 3 ALL MA ALL OH
和类似的SQL(错过了所有重复的行):
CREATE TABLE `lane` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`origRegion` varchar(45) NOT NULL,
`origState` char(2) NOT NULL,
`destRegion` varchar(45) NOT NULL,
`destState` char(2) NOT NULL
PRIMARY KEY (`id`)
)
结果(注意最后的count和minId):
1 ALL MA ALL OH 3 1 2 ALL MA ALL OH 3 1 3 ALL MA ALL OH 3 1
请注意,上面使用的查询是对解here的修改(在这种情况下不起作用)
答案 0 :(得分:1)
您可以运行此查询以从数据库中删除所有重复的行: -
ALTER IGNORE TABLE `lane`
ADD UNIQUE INDEX (`origRegion`, `origState`, `destRegion`, `destState`);
这将为您的表添加唯一索引并删除所有正常的行,并确保将来不会插入重复的行。
答案 1 :(得分:1)
圣诞快乐!!!
SELECT ID,
origRegion,
origState,
destRegion,
destState,
(SELECT COUNT(*)
FROM Lane l3
WHERE l.origRegion = l3.origRegion
and l.origState = l3.origState
and l.destRegion = l3.destRegion
and l.destState = l3.destState) as 'Count',
(SELEcT MIN(ID)
FROM Lane l2
WHERE l.origRegion = l2.origRegion
and l.origState = l2.origState
and l.destRegion = l2.destRegion
and l.destState = l2.destState) as minID
FROM lane l