如何仅显示查询的MAX结果

时间:2016-03-22 18:35:15

标签: sql-server max

我是编写MS SQL查询的新手,我试图只显示名为RecordVersion的最高字段的记录。 以下是有效的查询,但显示所有记录:

SELECT        
    PriceCalendars.PriceProgramID, 
    PriceCalendars.EffectiveDateTime, 
    PriceSchedules.Price, 
    PriceSchedules.PLU, 
    items.Descr, 
    PriceSchedules.LastUpdate, 
    PriceSchedules.LastUpdatedBy, 
    PriceSchedules.RecordVersion, 
    PriceSchedules.PriceScheduleUniqueID
FROM            
    PriceCalendars 
    INNER JOIN PriceSchedules ON PriceCalendars.PriceProgramID = PriceSchedules.PriceProgramID 
    INNER JOIN items ON PriceSchedules.PLU = items.PLU
WHERE        
    (PriceSchedules.PLU = 'SLS10100103') 
    AND (PriceCalendars.EffectiveDateTime = '2016-03-22')

以下是查询结果:

PriceProgramID  EffectiveDateTime   Price   PLU Descr   LastUpdate  LastUpdatedBy   RecordVersion   PriceScheduleUniqueID

1   2016-03-22 00:00:00.000 35.00   SLS10100103             Architecture Adult from NP POS  2015-01-22 07:53:15.000 GX70,83     9   569

1   2016-03-22 00:00:00.000 32.00   SLS10100103             Architecture Adult from NP POS  2014-02-25 16:22:46.000 GX70,83     5   86180

结果的第一行有RecordVersion为9,第二行结果为5,我只想显示更高的记录,返回RecordVersion = 9。

每当我尝试使用MAX命令时,我都会收到错误或分组,我已经尝试了我在网上找到的每个例子,但似乎没有任何效果。

使用MS SQL 2012。 谢谢, 肯

2 个答案:

答案 0 :(得分:1)

尝试以下查询,尝试通过RecordVersion DESC对返回的行进行排序,然后仅选择第一行来解决问题。

SELECT TOP 1      
    PriceCalendars.PriceProgramID, 
    PriceCalendars.EffectiveDateTime, 
    PriceSchedules.Price, 
    PriceSchedules.PLU, 
    items.Descr, 
    PriceSchedules.LastUpdate, 
    PriceSchedules.LastUpdatedBy, 
    PriceSchedules.RecordVersion, 
    PriceSchedules.PriceScheduleUniqueID
FROM            
    PriceCalendars 
    INNER JOIN PriceSchedules ON PriceCalendars.PriceProgramID = PriceSchedules.PriceProgramID 
    INNER JOIN items ON PriceSchedules.PLU = items.PLU
WHERE        
    (PriceSchedules.PLU = 'SLS10100103') 
    AND (PriceCalendars.EffectiveDateTime = '2016-03-22')
ORDER BY
    RecordVersion DESC

答案 1 :(得分:0)

所有按列分组都应该处于选择状态,这是分组依据的规则。工作分组是按列分组的每个不同组合,将剩余列排列成组,以便可以应用任何聚合,在你的情况下,我不确定哪个组按列排除测试日期是唯一的。有一个版本使用行号给你所需的输出

请记住,按上次更新日期排序的是决定行顺序和分配数字的日期

+