这是MS Access相关的查询。
MS Access
我有一个包含三列的表:FName, FValue and VDate在MS Access中。(实际表很大,但是下面的示例仅供参考)!http://postimg.org/image/bx0grwoa3/
FName, FValue and VDate
现在,我想获得以下类型的查询输出:获取每个唯一名称的最小季度值。例如: !http://postimg.org/image/je1w7gdi1/
到目前为止,通过使用以下命令,我可以通过硬编码标准获得四分之一的输出(在MS Access中)
SQL字符串是:
SELECT Table.FName, Min(Table.FValue) AS MinOfFValue, First(Table.VDate) AS FirstOfVDate FROM [Table] LEFT JOIN [Table] AS Table_1 ON Table.FValue = Table_1.FValue WHERE (((Table.VDate)>#3/31/2014# And (Table.VDate)<#7/1/2014#)) GROUP BY Table.FName;
现在,我希望日期不是硬编码的放置日期,而是要在其中存在季度名称(从日期到日期)的表的一部分中,Access将它们一一对应并提供所需的输出。
提前致谢。
第二个问题比第一个困难。我的方法是使用3个独立的查询来获取答案:
Query1为原始表中的每个记录返回一条记录,并从四分之一表中添加年份和四分之一。请注意,除了使用季度表之外,您还可以轻松地从日期开始计算年份和季度。
SELECT Table.FName, Table.FValue, Table.VDate, Quarters.Yr, Quarters.Qtr FROM [Table], Quarters WHERE (((Table.VDate)>=[start] And (Table.VDate)<=[end]));
Query2使用Query1的结果,并找到所需的最小值:
SELECT Query1.FName, Query1.Yr, Query1.Qtr, Min(Query1.FValue) AS MinValue FROM Query1 GROUP BY Query1.FName, Query1.Yr, Query1.Qtr;
Query3匹配Query1和Query2的结果,以显示达到最小值的数据。请注意,我使此查询为Sum,并使用First(VDate),假设最小值可能已多次出现,而您只需要第一次出现。
SELECT Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, First(Query1.VDate) AS MidDate, Query1.FValue FROM Query1 INNER JOIN Query2 ON (Query1.Qtr = Query2.Qtr) AND (Query1.FValue = Query2.MinValue) AND (Query1.FName = Query2.FName) GROUP BY Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, Query1.FValue;
在一个查询中可能有一种聪明的方法来完成所有这些操作,但这通常是解决类似问题的方法。