2014-10-08 175 views
0

我一直在寻找一段时间,并没有找到一个有效的例子。希望你能发现明显的错误!MySQL ORDER BY,GROUP BY内JOIN

SELECT 
     Timestamp 
     , i_currency.Code AS Code 
     , Conversion 
    FROM 
     i_convert(
      SELECT 
       Timestamp 
       , Conversion 
      FROM 
       i_convert 
      ORDER BY Timestamp DESC 
     ) 
     JOIN i_currency 
      ON i_convert.CurrencyID = i_currency.CurrencyID 
    GROUP BY Code 

我不确定JOIN应该在哪里,它应该在括号里,还是在外面或两者都有?我已经尝试了所有三个没有运气,不断得到:

You have an error... ...near '(SELECT Timestamp , Conversion FROM i_convert ORDER ' 
+0

@Strawberry:我认为这应该是别名。 – 2014-10-08 17:14:28

+0

@Strawberry没有这样的功能。他希望将其用作SELECT结果的别名。看这里:'ON i_convert.CurrencyID = i_currency.CurrencyID' – user4035 2014-10-08 17:14:36

+2

我认为这是浆果味讽刺。 :) – paqogomez 2014-10-08 17:14:59

回答

1

最初的查询没有意义。它使用GROUP BY,但试图选择既不分组列也不聚合函数的列。对于任何给定的结果行,预计哪种时间戳和哪种转换?

我想目标是选择每种货币的最新转换。这可能看起来更像这样:

SELECT 
    latest.Timestamp AS Timestamp 
    , i_currency.Code AS Code 
    , i_convert.Conversion AS Conversion 
FROM i_currency 
    JOIN i_convert 
     ON i_convert.CurrencyID = i_currency.CurrencyID 
    JOIN (
     SELECT MAX(Timestamp) as Timestamp, CurrencyId 
     FROM i_convert 
     GROUP BY CurrencyId 
    ) latest 
     ON i_convert.Timestamp = latest.Timestamp 
      AND i_convert.CurrencyId = latest.CurrencyId 
+0

宾果,你钉了它。非常感谢! – iforwms 2014-10-09 01:40:23

+0

那么也许你会在意接受答案? – 2014-10-09 15:13:51