Reputation: 137
My system doesn't allow CTE in coding and the first word has to always be SELECT.
Could someone explain (ideally in a Oracle SQL for dummies format) how I would go about changing code written with CTE into INLINE code?
As an example of CTE code:
WITH table1
AS (SELECT enquiry_status_log.enquiry_number,
enquiry_status_log.enquiry_log_number,
follow_up.follow_up_name,
enquiry_status_log.follow_up_date,
RANK ()
OVER (PARTITION BY enquiry_status_log.enquiry_number
ORDER BY enquiry_status_log.enquiry_log_number DESC)
rn
FROM enquiry_status_log
JOIN follow_up
ON enquiry_status_log.follow_up_code =
follow_up.follow_up_code)
SELECT enquiry_number,
enquiry_log_number,
follow_up_name,
follow_up_date
FROM table1
WHERE rn = 1
ORDER BY enquiry_number, enquiry_log_number
How would I write this (please, VERY easy to understand) so that SELECT would be the first word in the code and CTE wasn't used?
Upvotes: 0
Views: 92
Reputation: 222622
Your CTE is used only once in your query, so you can simply turn it to a subquery:
SELECT enquiry_number,
enquiry_log_number,
follow_up_name,
follow_up_date
FROM (
SELECT
e.enquiry_number,
e.enquiry_log_number,
f.follow_up_name,
e.follow_up_date,
RANK () OVER (
PARTITION BY e.enquiry_number
ORDER BY e.enquiry_log_number DESC
) rn
FROM enquiry_status_log e
JOIN follow_up f ON e.follow_up_code = f.follow_up_code
) table1
WHERE rn = 1
ORDER BY enquiry_number, enquiry_log_number
Note: table aliases make the query shorter and easier to read. I modified you query to use them.
Also, it is possible that your query could be rewritten to use a correlated subquery for filtering instead of rank()
. In Oracle, this could lead to better performance:
SELECT
e.enquiry_number,
e.enquiry_log_number,
f.follow_up_name,
e.follow_up_date
FROM enquiry_status_log e
JOIN follow_up f ON e.follow_up_code = f.follow_up_code
WHERE e.enquiry_log_number = (
SELECT MAX(enquiry_log_number)
FROM enquiry_status_log e1
WHERE e.enquiry_number = e1.enquiry_number
)
ORDER BY e.enquiry_number, e.enquiry_log_number
Upvotes: 3