繁体   English   中英

MySQL基于最大(时间戳)加入

[英]Mysql join based on max(timestamp)

我有一个网络应用程序,可让客户定义其服务的每日费率。 对于任何给定的一天,客户端可以输入两个费率,一个小时费率(rateTypeId = 1)和一个DailyRate(rateTypeId = 2)。 这些费率通常是预先分配的,并且经常更改。 我需要跟踪所有分配,但只提取最新分配的费率。

我有两张桌子。 第一张表只是定义了我的汇率结构,看起来像这样(简化):

表:RateDefinitions

RATECODE ----- RATE
31 ---------------- 5.00
32 ---------------- 6.00
33 ---------------- 7.00

我的第二张表跟踪分配给给定日期的汇率。 给定日期可以分配多个汇率,但是我们只会基于“ entrytimestamp”使用最新汇率。

表:费率

ID --- RATETYPEID --- RATECODE ------ DATE -------- ENTRYTIMESTAMP
1 ---------- 1 --------------- 31 ---------- 20091010 ---------- 1100000000
2 ---------- 2 --------------- 33 ---------- 20091010 ---------- 1100000000
3 ---------- 1 --------------- 32 ---------- 20091010 ---------- 1200000000

现在,我很难将查询合并到给定时间范围内所有最新的费率分配。

我试过了:

select r.id, r.rateTypeId, r.rateCode, max(r.entryTimestamp), rd.rate
from rates r
join rateDefinitions rd
on r.rateCode=rd.rateCode
where date=20091010
group by startDate, rateTypeId

但这是行不通的。 我在想我需要在subselect语句上进行联接,但不确定。 我的结果每个日期应包含两行,类似于:

ID --- RATETYPEID --- RATECODE ---------- ENTRYTIMESTAMP ----- RATE
3 ----------- 1 --------------- 32 -------------------- 1200000000 ----------6.00
2 ----------- 2 --------------- 33 -------------------- 1100000000 ----------7.00

感谢您的任何建议。

这个问题相当普遍。 您需要一个子查询来抛出最大时间戳和ratetypeid(这是分组的基础),然后从此子查询行的内部联接中选择所有其他内容。

对于MySQL:

SELECT ratecode, rate, id, ratetypeid, date, entrytimestamp 

FROM ratedefinitions, 
(SELECT ratetypeid, MAX(entrytimestamp) AS max_timestamp FROM Rates 
GROUP BY ratetypeid) AS inner_table

WHERE

inner_table.ratetypeid = ratetypeid
AND innertable.max_timestamp = timestamp

我建议一个子查询:

select r.id, r.rateTypeId, r.rateCode, max(r.entryTimestamp), rd.rate 
from  
rateDefinitions rd,
rate r,
    (select 
        rateCode, max(entryTimestamp) maxEntryTimestamp
    from
        rate
    where date=20091010
    group by rateCode) latestRates

where r.rateCode=rd.rateCode  AND
    r.rateCode = latestRates.rateCode AND
    r.entryTimestamp = latestRates.maxEntryTimestamp
group by startDate, rateTypeId

我有一个很大的假设。 也就是说,在费率表中,对于给定的日期和费率代码,entrytimestamps是唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM