我是这个论坛的新手,也是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。
答案 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
。