【问题标题】:Get the latest row of a table based on Latest Date and a distinct column in SQL Server 2008 R2根据最新日期和 SQL Server 2008 R2 中的不同列获取表的最新行
【发布时间】:2018-10-07 16:16:36
【问题描述】:

如果我有以下 SQL 表

<table border="1">
<tr><td>colOne</td><td>colTwo</td><td>colThree</td><td>colDate</td></tr>
<tr><td>0</td><td>1</td><td>8</td><td>2014-02-05 00:00:00.000</td></tr>
<tr><td>0</td><td>6</td><td>8</td><td>2014-05-13 00:00:00.000</td></tr>
<tr><td>0</td><td>10</td><td>37</td><td>2014-07-25 00:00:00.000</td></tr>
<tr><td>0</td><td>12</td><td>184</td><td>2014-08-11 00:00:00.000</td></tr>
<tr><td>0</td><td>13</td><td>11</td><td>2014-08-12 00:00:00.000</td></tr>
<tr><td>0</td><td>41</td><td>14</td><td>2015-02-16 00:00:00.000</td></tr>
<tr><td>0</td><td>42</td><td>14</td><td>2015-02-16 00:00:00.000</td></tr>
</table>

我想要以下结果,这是每个不同 colThree 的最新记录

<table border="1">
<tr><td>colOne</td><td>colTwo</td><td>colThree</td><td>colDate</td></tr>
<tr><td>0</td><td>6</td><td>8</td><td>2014-05-13 00:00:00.000</td></tr>
<tr><td>0</td><td>10</td><td>37</td><td>2014-07-25 00:00:00.000</td></tr>
<tr><td>0</td><td>12</td><td>184</td><td>2014-08-11 00:00:00.000</td></tr>
<tr><td>0</td><td>13</td><td>11</td><td>2014-08-12 00:00:00.000</td></tr>
<tr><td>0</td><td>42</td><td>14</td><td>2015-02-16 00:00:00.000</td></tr>
</table>

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    也许最快的方法是:

    select t.*
    from t
    where t.colDate = (select max(t2.colDate) from t t2 where t2.colThree = t.colThree);
    

    使用row_number() 的更规范的方式会做你想做的事:

    select t.*
    from (select t.*,
                 row_number() over (partition by colThree order by colDate desc) as seqnum
          from t
         ) t
    where seqnum = 1;
    

    如果出现平局,这将选择任意一行。

    【讨论】:

    • 我试过了,但还是返回了不止一个 col3 条记录。它应该只选择最新的 colThree 号码记录。
    • @cSharpDotNetGuy,在 colThree = 14 的情况下,日期相同,您想要返回的行是什么?您选择的标准是什么?
    • Alex,在这种情况下,我想要最新的 colTwo。谢谢你,先生。
    • @cSharpDotNetGuy 。 . . row_number() 的版本保证只会选择一行。
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2015-02-06
    • 1970-01-01
    • 2014-10-27
    • 2013-11-24
    相关资源
    最近更新 更多