SQL如何选择两个几乎相同的行中的一个

时间:2015-06-04 19:03:15

标签: sql select

为了进一步澄清,因为我并没有真正想到如何轻松地概括这一点...让我说在杂货店的包装产品表中有以下行:

PRODUCT ---------- TYPE ---------- PRICE ---------- ITM KEY
APPLE             device            $5               1117
APPLE X10 RED     device            $5               1117
ORANGE X20        device            $6               1189
BANANA            device            $4               1175
BANANA X5         device            $4               1175
KIWI X5           device            $7               1201

这表示一个表已更新其数据库,以包含有关产品名称末尾包中有多少信息的额外信息。不幸的是,进入的人忘记删除以前的数据,因此任何选择都将包括重复的旧数据以及新行。由于没有日期指示器来确定产品何时更新以及产品名称后的信息可能会有所不同,我如何选择新的行呢?

谢谢你们。

1 个答案:

答案 0 :(得分:1)

如果所有较新的行都包含其中的数量,并且较旧的行没有,则可以尝试以下内容:

Select * from MyTable
where [Product] like '%X[0-9]%'

或者,如果所有较新的行都在名称中添加了其他内容,请尝试以下操作:

Select * from (
  Select *
  , ROW_NUMBER() over (partition by ItmKey order by len(product) desc) RN
  from MyTable
  ) a
where a.RN = 1

第一个选项选择产品名称包含的每一行' X'接下来是一个数字。对于每个item ID,第二个将返回具有最长产品名称的行。