显示上次更新日期

时间:2016-02-16 19:28:21

标签: sql

我是这个论坛的新手,也是SQL新手,我的问题是

我有一个Excel表格链接到数据库“从Microsoft查询”我有3个表链接在一起pd_ln,pdcflbrt,pdlbr

通过使用以下查询,我得到此数据

SELECT pdcflbrt.lbrcod, pdcflbrt.lbrrat, pd_ln.prdnum, pdcflbrt.begeffdat
    FROM velocity.dbo.pd_ln pd_ln, velocity.dbo.pdcflbrt pdcflbrt, velocity.dbo.pdlbr pdlbr
    WHERE pdlbr.lbrrattky = pdcflbrt.lbrrattky AND pd_ln.pd_ln_tky = pdlbr.pd_ln_tky 

+--------------+--------------+-----------+------------------+
|    lbrcod    |       lbrrat |  prdnum   |    begeffdat     |
+--------------+--------------+-----------+------------------+
| FC Braselton | 0.11         |     00236 | 7/15/2012 0:00   |
| FC Braselton | 0.11         |     00236 | 7/15/2012 0:00   |
| FC Braselton | 0.1          |     00236 | 12/10/2012 0:00  |
| Sizing       | 0.21         |     03103 | 8/28/2015 0:00   |
| Sizing       |         0.2  |     03103 | 10/13/2011 0:00  |
+--------------+--------------+-----------+------------------+

如何查询获取每个prdnum的最后一个begeffdat。

2 个答案:

答案 0 :(得分:0)

- 仅限姓名和最新日期

select lbrcod, max(begeffdate) begeffdat from @table
group by lbrcod

- 适用于所有列

select * from (
    select *, row_number() over (partition by prdnum order by begeffdate desc) rowNum from @table
) data
where rowNum = 1

答案 1 :(得分:0)

Magood的回答可能适用于这种情况。但是,如果您选择的每个编辑都有唯一标识符,那么它将无法正常工作。据我所知,你必须像row_number()一样参与其中:

SELECT s2.lbrcod, s2.lbrrat, s2.prdnum, s2.begeffdat from 
    (SELECT pdcflbrt.lbrcod
    , pdcflbrt.lbrrat
    , pd_ln.prdnum
    , pdcflbrt.begeffdat
    , row_number() over (partition by pd_ln.prdnum order by pdcflbrt.begeffdat desc) as RN
    FROM velocity.dbo.pd_ln pd_ln, velocity.dbo.pdcflbrt pdcflbrt, velocity.dbo.pdlbr pdlbr
    WHERE pdlbr.lbrrattky = pdcflbrt.lbrrattky AND pd_ln.pd_ln_tky = pdlbr.pd_ln_tky) s2
where s2.rn = 1

这将只返回最高日期(它是内部部分的相同查询,但添加了row_number()函数,每个不同的prdnum开始数字,并按行排序date,最新日期优先。外部仅选择第1行(最后where),这是最新的日期。

编辑:或者,如果您只想要OLDEST更新,则可以更改主查询的desc语句中的select以说明asc