Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I Have trouble with the second clause WITH

I am trying to run this Query, but it is telling me I have an error in the second WITH, where it says WITH tabla AS.

This is my Query, does anyone have any comments or how can I make it run?

Please help!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

WITH reservations AS (
        SELECT r.id "trip_id",
        r.departure_time AT TIME ZONE 'America/Mexico_City' "trip_departure_time",
        (r.departure_time AT TIME ZONE 'America/Mexico_City')::DATE "trip_departure_date",
        (r.departure_time AT TIME ZONE 'America/Mexico_City')::TIME "trip_time",
        rs.name "route_name",
        rl.name "line_name",
        CASE
        WHEN rs.short_name ILIKE '%Intercity%' OR rs.short_name ILIKE '%Travel%' THEN 'Travel'
        ELSE 'City' END "vertical",
        r.seats "trip_seats",
        CASE
        when rr.id IS NULL THEN r.seat_price
        ELSE rr.cost END "trip_cost",
        rr.id "reservation_id",
        rr.seats "tickets_sold",
        rr.cost "ticket_cost",
        vv.short_name "van_name",
        rs.km_google "km"
        FROM routes_route r
        INNER JOIN routes_stopslayout rs on r.stops_id = rs.id AND
        (r.departure_time AT TIME ZONE 'America/Mexico_City' BETWEEN '{start_date}' AND '{end_date}') AND r.is_active AND
        NOT rs.is_private --AND NOT (rs.short_name ILIKE '%%Intercity%%' OR rs.short_name ILIKE '%%Travel%%')
        INNER JOIN routes_lines rl on rs.line_fk_id = rl.id AND NOT rl.name ILIKE 'Sigma Tepotzotlán' AND NOT rl.name ILIKE 'Flow Fest 2021' AND NOT rl.name ILIKE 'San Marcos Especial'
        INNER JOIN vans_van vv on r.van_id = vv.id
        LEFT JOIN reservations_reservation rr on r.id = rr.route_id AND rr.is_active AND rr.successfully_charged
--GROUP BY r.id,rs.id,rl.id
        )
        
WITH tabla AS(
        SELECT
        trip_id,
        trip_departure_date,
        trip_time,
        route_name,
        line_name,
        vertical,
        van_name,
        MAX(trip_seats) "trip_seats",
        MAX(trip_cost) "trip_cost",
        COUNT(DISTINCT reservation_id) "num_reservations",
        SUM(tickets_sold) "tickets_sold",
        SUM(ticket_cost) "revenue",
        MAX(km) "km",
        SUM(tickets_sold)/MAX(trip_seats) "occ"
    

FROM reservations
GROUP BY 1,2,3,4,5,6,7
)

SELECT 
trip_departure_date,
trip_time,
route_name,
line_name,
vertical,
van_name,
MAX(trip_seats) trip_seats,
MAX(trip_cost) "trip_cost",
MAX(num_reservations) "num_reservations",
MAX(tickets_sold) "tickets sold",
AVG(revenue) "revenue",
MAX(km) "km",
AVG(occ) "occ"

FROM tabla

GROUP BY line_name

>Solution :

If you want to use multiple CTE the WITH clause only needs to add to the first one, others just need to use , instead of WITH

WITH reservations AS (
        SELECT r.id "trip_id",
        r.departure_time AT TIME ZONE 'America/Mexico_City' "trip_departure_time",
        (r.departure_time AT TIME ZONE 'America/Mexico_City')::DATE "trip_departure_date",
        (r.departure_time AT TIME ZONE 'America/Mexico_City')::TIME "trip_time",
        rs.name "route_name",
        rl.name "line_name",
        CASE
        WHEN rs.short_name ILIKE '%Intercity%' OR rs.short_name ILIKE '%Travel%' THEN 'Travel'
        ELSE 'City' END "vertical",
        r.seats "trip_seats",
        CASE
        when rr.id IS NULL THEN r.seat_price
        ELSE rr.cost END "trip_cost",
        rr.id "reservation_id",
        rr.seats "tickets_sold",
        rr.cost "ticket_cost",
        vv.short_name "van_name",
        rs.km_google "km"
        FROM routes_route r
        INNER JOIN routes_stopslayout rs on r.stops_id = rs.id AND
        (r.departure_time AT TIME ZONE 'America/Mexico_City' BETWEEN '{start_date}' AND '{end_date}') AND r.is_active AND
        NOT rs.is_private --AND NOT (rs.short_name ILIKE '%%Intercity%%' OR rs.short_name ILIKE '%%Travel%%')
        INNER JOIN routes_lines rl on rs.line_fk_id = rl.id AND NOT rl.name ILIKE 'Sigma Tepotzotlán' AND NOT rl.name ILIKE 'Flow Fest 2021' AND NOT rl.name ILIKE 'San Marcos Especial'
        INNER JOIN vans_van vv on r.van_id = vv.id
        LEFT JOIN reservations_reservation rr on r.id = rr.route_id AND rr.is_active AND rr.successfully_charged
), tabla AS(
    SELECT
            trip_id,
            trip_departure_date,
            trip_time,
            route_name,
            line_name,
            vertical,
            van_name,
            MAX(trip_seats) "trip_seats",
            MAX(trip_cost) "trip_cost",
            COUNT(DISTINCT reservation_id) "num_reservations",
            SUM(tickets_sold) "tickets_sold",
            SUM(ticket_cost) "revenue",
            MAX(km) "km",
            SUM(tickets_sold)/MAX(trip_seats) "occ"
    FROM reservations
    GROUP BY 1,2,3,4,5,6,7
)
SELECT 
    trip_departure_date,
    trip_time,
    route_name,
    line_name,
    vertical,
    van_name,
    MAX(trip_seats) trip_seats,
    MAX(trip_cost) "trip_cost",
    MAX(num_reservations) "num_reservations",
    MAX(tickets_sold) "tickets sold",
    AVG(revenue) "revenue",
    MAX(km) "km",
    AVG(occ) "occ"

FROM tabla
GROUP BY line_name
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading