Search code examples
sqldata-sciencedata-analysispresto

Aliasing a table in a window function?


I am trying to alias a table in a window function, but not sure what I am doing wrong as when I alias it gives error that the columns cannot be resolved

    SELECT e.city,
       e.time,
       e.day,
       e.id,
       m.id
FROM
  (SELECT *,
          rank() OVER (PARTITION BY e.id,
                                    e.bin
                       ORDER BY e.time ASC) rnk
   FROM table e
   JOIN table2 m 
   on m.id = e.id
   WHERE e.status = 'YES'
   AND e.day BETWEEN date '2019-05-06' and date '2019-05-08')
WHERE rnk = 1

Solution

  • You have used the e alias in the outermost select. However, there is nothing in scope with that alias. The inner from doesn't "reach out" like that (scopes do "reach in" the other way though).

    So:

    SELECT e.city, e.time, e.day, e.id
    FROM (SELECT e.*,
                 rank() OVER (PARTITION BY e.id, e.bin ORDER BY e.time ASC) as rnk
          FROM table e
          WHERE e.status = 'YES' AND
                e.day BETWEEN date '2019-05-06' and date '2019-05-08'
         ) e
    -------^ here
    WHERE rnk = 1