我想选择倒数第二条记录(按日期),使用产品名称进行过滤。
使用此查询,我选择我有记录的所有日期。
select distinct(lstfchdes) from precios (nolock) where lstfchdes > '01/01/2018'
order by lstfchdes desc
在红色框上的图像中标记倒数第二个记录。
我使用distinct
因为我在确定日期有多个注册。
使用此查询,我选择倒数第二条记录。
SELECT lstfchdes FROM precios (nolock)
WHERE lstfchdes = (SELECT MAX(lstfchdes)
FROM precios (nolock)
WHERE lstfchdes < (SELECT MAX(lstfchdes)
FROM precios (nolock)))
多数民众赞成找到了。请参阅图像2.我在此查询中不使用distinct,因此在日期中看到多个寄存器的逻辑也是如此。 (将此结果与Image1进行比较)
我的问题是在查询中应用过滤器时,例如:
select * from precios (nolock)
WHERE prdid='PRO167' and lstid='L04'
order by lstpfchupd desc
倒数第二的纪录是2018-03-03。
但是如果我执行这个查询:
SELECT lstfchdes FROM precios (nolock)
WHERE lstfchdes = (SELECT MAX(lstfchdes)
FROM precios (nolock)
WHERE lstfchdes < (SELECT MAX(lstfchdes)
FROM precios (nolock)))
and prdid='PRO167' and lstid='L04'
结果返回2018-03-05之外的倒数第二条记录:
可能是什么问题?
答案 0 :(得分:0)
您需要为所有MAX
语句应用过滤器。这是因为您的聚合还需要将过滤器应用于它们。否则,您的Pizza(?p),
hasIngredient(?p, ?ing1), hasIngredient(?p, ?ing2),
hasCountryOfOrigin(?ing1, ?c1), hasCountryOfOrigin(?ing2, ?c1),
differentFrom(?ing1, ?ing2) -> NationalPizza(?p)
和类似的聚合将没有过滤器,并且会导致错误的结果。