我希望在一个步骤中创建一个结果,只为每个ValidFrom
提供最新的(前1个)Code
日期,
表1
Code Rate ValidFrom
A 0% 1/1/2018
B 20% 1/2/2018
A 20% 1/3/2018
A 10% 1/1/2017
B 5% 1/2/2017
C 30% 1/3/2016
查询结果为以下输出:
Code Rate ValidFrom
B 20% 1/2/2018
A 20% 1/3/2018
C 30% 1/3/2016
使用Code
对Max(ValidFrom)
进行分组并不起作用,因为每个Rate
日期的ValidFrom
不同,因此会返回每条记录。
最简单的解决方案是创建临时查询(Query1):
SELECT Sub1.Code, Max(Sub1.ValidFrom) AS ValidFrom
FROM Table1 AS Sub1
GROUP BY Sub1.Code;
然后使用Query2过滤结果:
SELECT Table1.Code, Table1.Rate, Table1.ValidFrom
FROM Query1 INNER JOIN Table1 ON (Query1.ValidFrom=Table1.ValidFrom) AND (Query1.Code=Table1.Code);
但这很麻烦,因为它只需要一个Query1作为临时步骤,我想找到一个更整洁的方法。
所以,我试图找出如何将Query1的SQL作为子查询包含在Query2中(因此引用Sub1),但只是无法弄清楚。
作为替代解决方案,我尝试使用TOP 1类型查询(Query3):
SELECT TOP 1 Sub1.Code, Sub1.Rate, Sub1.ValidFrom
FROM Table1 AS Sub1
ORDER BY Sub1.ValidFrom DESC;
这只会为每个代码生成一条记录而不是一条记录。
我可以通过添加Code
子句
WHERE
SELECT TOP 1 Sub1.Code, Sub1.Rate, Sub1.ValidFrom
FROM Table1 AS Sub1
WHERE (((Sub1.Code)="C"))
ORDER BY Sub1.ValidFrom DESC;
所以接下来尝试将其用作子查询但不能正常工作(Query4):
SELECT Table1.Code, Table1.ValidFrom, Table1.Rate
FROM Table1
WHERE
(SELECT TOP 1 Sub1.Rate
FROM Table1 AS Sub1
WHERE (((Sub1.Code)=Table1.Code))
ORDER BY Sub1.ValidFrom DESC)
我显然对子查询有很多了解,但是有人可以把我放在正确的轨道上。提前谢谢。
答案 0 :(得分:2)
我会使用相关子查询来执行此操作:
$("#jplayer_id").bind($.jPlayer.event.ready, function(event) {
// do stuff
});