Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从row_NUM中仅选择编号最高的行以获取最新更新_Sql_Tsql - Fatal编程技术网

Sql 从row_NUM中仅选择编号最高的行以获取最新更新

Sql 从row_NUM中仅选择编号最高的行以获取最新更新,sql,tsql,Sql,Tsql,我还在学习SQL。目前,我能够从分区和row_number()中获取行号 然而,我被困在一个我想不出方法来选择最高的行数以便只查看最新更新的记录的地方 我在末尾得到了无效的列名。我为混乱的结构道歉,我计划把它清理得更好 提前感谢你们的回答/提示。谢谢你抽出时间 编辑:最新更新实际上是返回的行数最高,而不是1。我忘了具体说明 FROM ( SELECT a.DELFLAG, a.fname, a.lname,

我还在学习SQL。目前,我能够从分区和row_number()中获取行号

然而,我被困在一个我想不出方法来选择最高的行数以便只查看最新更新的记录的地方

我在末尾得到了无效的列名。我为混乱的结构道歉,我计划把它清理得更好

提前感谢你们的回答/提示。谢谢你抽出时间

编辑:最新更新实际上是返回的行数最高,而不是1。我忘了具体说明

FROM
        (
        SELECT
        a.DELFLAG,
        a.fname, 
        a.lname, 
        a.key1, 
        l.key2,
        l.update,
        ROW_NUMBER() OVER(PARTITION BY key1, key2 ORDER BY l.lupdate DESC) AS row_num 

FROM dbo.t1 a
    
    INNER JOIN dbo.t2 i ON i.key1 = a.key1
    INNER JOIN dbo.t3 l ON l.key1 = i.key1
    ) AS K  

WHERE 
    [row_num] = SELECT MAX([row_num]) AS latest)
    AND
    DELFLAG = 0 

编辑2:因为一条记录可以在同一天更新多次,但只有最后一行号反映了最新的更新

这是您的代码:

WHERE 
    [row_num] = SELECT MAX([row_num]) AS latest)
很可能,您想要:

WHERE 
    [row_num] = 1
理由:
row\u number()
对分区内的记录进行排序;在代码中,它为每个
(键1,键2)
元组分配秩
1
,并使用max
l.update
。这些是你想要保留的记录,所以。。。只需按
[row\u num]=1进行筛选即可

另一方面,如果您想要每个分区的最早记录,则在window函数的
order by
子句中使用升序排序,而不是降序排序:

ROW_NUMBER() OVER(PARTITION BY key1, key2 ORDER BY l.lupdate) as row_num

外部查询仍然会过滤
行数=1

您可以只使用
count()
然后在
where
子句中使用它来计算最大行数:

   COUNT(*) OVER (PARTITION BY key1, key2) AS cnt
然后:

WHERE cnt = row_num

这假设您希望每对
key1
/
key2

一行。哎呀,很抱歉没有彻底解释结构。最新更新实际上是最大的行数,而不是1。。。。谢谢你的解释和理由。虽然这有助于我进一步理解,但我做了一个编辑2来进一步解释为什么它在我的案例中不起作用。希望我已经详细地解释了我的情况。@SabreTheCat:哪一行得到最后一个行号是由窗口函数的
orderby
子句定义的。您只需选择排序方向(
orderbyl.update[asc/desc]
),将感兴趣的行放在第一位……非常感谢您的帮助!这是我所需要的,非常感谢你的帮助!