如何指定要从连接结果中选择的列

时间:2016-07-04 13:25:38

标签: sql postgresql

我的表Ce_Data有一列" Fut_ID"

为什么我会得到一个不明确的"第一行出错? TX" Fut_ID"不起作用

SELECT "Fut_ID"
FROM (
SELECT *
  FROM "Ce_Data" AS M
  JOIN (SELECT "Fut_ID", MAX("Date") AS "Most_Recent"
          FROM "Ce_Data"
         GROUP BY "Fut_ID"
       ) AS R
    ON R."Fut_ID" = M."Fut_ID" AND R."Most_Recent" = M."Date"
) AS TX

2 个答案:

答案 0 :(得分:1)

外部查询从内部子查询中选择Fut_ID。但是,有两个不同的来源可供选择Fut_ID来自:table Ce_Data(别名M带有别名的派生表{ {1}}。您可以通过在派生表中使用字段的别名来解决此问题:

R

答案 1 :(得分:1)

由于Fut_ID位于两个表中,因此出现了模糊错误,因此子查询中的含义不明确(*获取所有列名称,甚至是重复项。只需明确列出第二个表中的列:

SELECT TX.*
FROM (SELECT M.*
      FROM "Ce_Data" M JOIN
           (SELECT "Fut_ID", MAX("Date") AS "Most_Recent"
            FROM "Ce_Data"
            GROUP BY "Fut_ID"
           ) R
           ON R."Fut_ID" = M."Fut_ID" AND R."Most_Recent" = M."Date"
     ) TX;

(我添加了TX.*,因为否则查询处理没有意义。)

或者,更好的是,使用窗口函数:

SELECT TX.*
FROM (SELECT M.*, MAX("Date") OVER (PARTITION BY "Fut_ID") as "Most_Recent"
      FROM "Ce_Data" M 
     ) M
ON "Most_Recent" = "Date"