我是编写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。 谢谢, 肯
答案 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)
所有按列分组都应该处于选择状态,这是分组依据的规则。工作分组是按列分组的每个不同组合,将剩余列排列成组,以便可以应用任何聚合,在你的情况下,我不确定哪个组按列排除测试日期是唯一的。有一个版本使用行号给你所需的输出
请记住,按上次更新日期排序的是决定行顺序和分配数字的日期
+