SQL:使用子查询进行查询。如何获得最大日期?

时间:2018-01-20 20:43:53

标签: sql ms-access

我有以下查询("基准"表示"日期"):

    'SELECT MCap.Isin,  MCap.Datum,  MCap.MarketCap 
FROM (SELECT MCap.Isin AS myISIN FROM Constituents 
INNER JOIN MCap ON Constituents.Isin = MCap.Isin 
WHERE ((MCap.Datum=DateAdd("m", -' num2str(WindowSize) ', #' ConstituentDate '#)) AND (Constituents.Datum=#' ConstituentDate '#))) AS AvailableISIN 
INNER JOIN MCap ON AvailableISIN.myISIN = MCap.Isin 
WHERE (MCap.Datum IN 
(SELECT max(MCap.Datum) FROM MCap 
WHERE (MCap.Datum>=DateAdd("m", -' num2str(WindowSize) ', #' ConstituentDate '#) AND (MCap.Datum<#' ConstituentDate '#)) GROUP BY MONTH(MCap.Datum), YEAR(MCap.Datum))) ORDER BY MCap.ISIN, MCap.Datum'];

这个查询给了我MCap中每个成员(&#34; isin&#34;)的市场资本化,当它也在&#34;成分&#34;在一定时期内。

不,我想只在给定时间段内提供最后一个日期。我觉得像max(MCap.Datum)这样的东西,但具有讽刺意味的是它只给了我第一个可用的日期。有人在这里有提示吗?

使用Matlab和Access。

1 个答案:

答案 0 :(得分:0)

添加&#39;订购MCap.Datum DESC&#39;到你的陈述结束。

通过这种方式,当您迭代结果时,只要MCap.Datum值发生更改,您就知道已经处理了所有具有最高日期的匹配行。

根据您的数据模型,如果只存在一个这样的行,那么您还可以添加&#39; LIMIT 1&#39;到你的陈述,只返回那一行。