SQL Server - 查找与特定值匹配的最后一行

时间:2016-10-07 01:32:52

标签: sql sql-server

我是SQL的新手,我在创建查询以查找表中的最后一个条目时遇到问题,其中一列包含特定字符串的一部分。我有一个类似于:

的数据库
Part Number | Description | Qty 
------------+-------------+-----
   MO1      | Big Motor   | 1 
   MO2      | Small Motor | 5   
   XYZ      | Garbage     | 1 
   BO1      | Big Bolt    | 1 
   BO2      | Small Bolt  | 2 

我正在寻找一种方法来查询"部件号"以" MO"开头然后返回最后一个条目(" MO2 / Small Motor / 5"在这种情况下)。部件号始终是顺序的,但在格式正确的数字之间可能存在大量垃圾数据。我更习惯于使用Excel,我可以找到"查找"通过相反的顺序搜索字符串,但我不知道如何在SQL中执行等效操作。

3 个答案:

答案 0 :(得分:3)

如果通过" last"你的意思是以MO开头的最大值,那么你可以这样做:

select top 1 t.*
from t
where partnumber like 'MO%'
order by partnumber desc     -- or some other column that specifies the ordering

如果数字最终看起来像MO101,那么你可以这样做:

order by len(partnumber) desc, partnumber desc

答案 1 :(得分:0)

假设您在python setup.py bdist_msi 和数字部件号之间可以有junk data,那么这里有MO个结尾字符的一个选项:

order by

select top 1 * from yourtable where partnumber like 'mo%' order by cast(right(partnumber, patindex('%[^0-9 ]%',reverse(partnumber)) - 1) as int) desc reverse一起使用,您可以在字符串末尾获取剩余的数字字符。然后,使用patindex right可以轻松订购结果。

答案 2 :(得分:0)

SELECT
    TOP 1 *
FROM
    {TableName}
WHERE
    [Part Number] LIKE '%MO%'
ORDER BY
    [Part Number] DESC
  

零件编号始终是顺序的

按部件号反转订单并选择第一个

如果你想让'Mo'成为变量

DECLARE
    @PartSearch NVARCHAR(MAX) = **'Mo'**
SELECT
    TOP 1 *
FROM
    {TableName}
WHERE
    [Part Number] LIKE '%' + @PartSearch + '%'
ORDER BY
    [Part Number] DESC

http://sqlfiddle.com/#!6/9385d/3