SQL Server查询选择表的一行,其中2个条件必须为true

时间:2018-01-25 07:25:47

标签: sql-server

我有一个包含6列的表

No, Id, Created, Snapshot, Note, Size

请参阅屏幕截图以了解表格结构。

enter image description here

我想选择注意的行,例如"默认"并且具有最大值。请注意,Note可能包含几个相同的值,例如"默认"

这可能是一个非常基本的问题。但已经问过了。但我找不到任何对我有用的东西。到目前为止,我尝试过: -

SELECT * 
FROM Mytable
WHERE Note = 'defalut' AND No = (SELECT MAX(No) FROM Mytable)    

我没有结果。请让我知道如何获得它。提前致谢!

3 个答案:

答案 0 :(得分:1)

以下是使用Max Over()窗口函数

的一种方法
SELECT *
FROM   (SELECT *,
               MaxNo = Max(No)OVER()
        FROM   Mytable
        WHERE  Note = 'default') a
WHERE  No = MaxNo 

答案 1 :(得分:0)

在这种情况下,您可以使用ROW_NUMBER()来获取最大的No

SELECT  No, Id, Created, Snapshot, Note, Size
FROM 
    (
        SELECT  *,
                RN = ROW_NUMBER () OVER (ORDER BY No DESC)
        FROM    MyTable
        WHERE   Note = 'default'
    ) a
WHERE RN = 1

但是,如果No对于所有行都是唯一的,则只需在子查询中删除添加Note过滤器

SELECT No, Id, Created, Snapshot, Note, Size
FROM   Mytable
WHERE  No = (SELECT MAX(No) FROM Mytable WHERE Note = 'default')   

答案 2 :(得分:0)

你几乎是正确的:

SELECT * 
FROM Mytable
WHERE Note = 'default' AND No = (SELECT MAX(No) FROM Mytable WHERE Note = 'default')