如何检索倒数第二行?

时间:2015-07-30 06:25:28

标签: sql sql-server sql-server-2008-r2

我有一张包含许多记录的表格,而且我只想知道我最后创建的记录。

例如:我有一张表customer,其中customerID是随机数。

现在我想选择倒数第二行。

customerID      customer_name   cont_no
---------------------------------------
 7              david sam       5284
 1              shinthol        1
11              lava            12548
 2              thomas          1
 3              peeter          1
 4              magge           1
 5              revas           1
 6              leela           123975

输出行:

customerID      customer_name   cont_no
5               revas           1

我不想要第二高......

我想要倒数第二行。

8 个答案:

答案 0 :(得分:2)

正如你所说,我可以举个例子。

想象一下,你有一整袋苹果。你怎么能拿第二个苹果?你怎么知道哪一个是倒数第二?当你不以任何方式对它们进行排序时,你不能这样做。

目前您的数据尚未排序,因此无法按预期实现。只有在您有date createdSELECT TOP 1 * FROM( SELECT TOP 2 * FROM Tbl ORDER BY SortingCol DESC -- here you need to pass column which will provide expected sorting ) t ORDER BY SortingCol 等任何排序条件后,您才能在以下内容中执行此操作。

$('.test').change(function() {
  $(".test1").prop("disabled", this.value == -1);
});

答案 1 :(得分:1)

发布答案,因为这是一个很大的评论

大卫:好的,我下次会这样做,但我现在可以做的就是这个问题,有很多千禧年。有什么方法可以做到这一点? @Deepanshu Kalara

我:@david山姆,我不认为现在有办法做到这一点。 最好的选择是复制excel中的那千条记录,并希望它们是为了你插入它们。在那里创建一个手动列,就像你有自动增量一样。正如你所说的那样,通过在表格中插入该列来纠正你的表结构。

答案 2 :(得分:1)

正如您可能已经知道的那样,您需要一个列来命令才能完成此任务。 OVER条款可用于此。

;WITH CTE as
(
  SELECT 
    customerid, customer_name, cont_no, 
    row_number() over (order by newlymadesortcolumn desc) rn
  FROM customer
)
SELECT customerid, customer_name, cont_no
FROM CTE
WHERE rn = 2

答案 3 :(得分:0)

试试这个

;WITH tbl_rn AS (
    select 
        RowNum = row_number() OVER (ORDER BY @@rowcount),
        customerID,
        customer_name,
        cont_no
    from  tbl
)
select 
    customerID,
    customer_name,
    cont_no
from tbl_rn 
where RowNum = (select max(RowNum) - 1 from tbl_rn)

此处RowNum是一个列,它通过对表中的行进行编号而不对其进行排序。

max(RowNum) - 1将提供最后一个

答案 4 :(得分:0)

  

数据应该在有效搜索之前进行排序。

我建议您使用autoincrement在表格ID中添加额外字段。

这不是一个大问题,如下所示: enter image description here

查询:

SELECT        TOP (1) customerID, customer_name, cont_no, id
FROM            (SELECT        TOP (2) customerID, customer_name, cont_no, id
                          FROM            customer
                          ORDER BY id DESC) AS t
ORDER BY id
  

第一个前2个数据以降序(DESC)方式选择   结果基于id值为:

     

8,7(示例中显示了8个值)

     

接下来选择ASC中的前1值(升序方式)

输出:

enter image description here

答案 5 :(得分:0)

使用SQL Server 2012或更高版本,您可以在一个行代码中执行此操作:

struct Server {
    let url: String
    let username: String
    let password: String
}

struct Environment {
    let profile: Server
    let payment: Server
    let images: Server

    static let development = Environment(
        profile: Server(url: "http://google.com", username: "abc", password: "xyz"),
        payment: Server(url: "http://bing.com", username: "abc", password: "xyz"),
        images: Server(url: "http://duckduckgo.com", username: "abc", password: "xyz")
    )

    static let production = Environment(...)

    static var current: Environment {
        #if DEBUG
            return development
        #else
            return production
        #endif
    }
}

答案 6 :(得分:0)

我知道这已经太晚了,你可以尝试一下。

SELECT TOP 1 * FROM (SELECT * FROM dbo.customer
EXCEPT SELECT TOP (SELECT (COUNT(*)-2) FROM dbo.customer ) * FROM dbo.customer) A 

答案 7 :(得分:-1)

选择身份(int,1,1)作为Id,*从客户中选择#temp select * from #temp其中Id =(选择max(Id)作为来自#temp group by Id的计数) - 1 删除表#temp