I have a table with all the appointments information
| id_appoint | id_doc | app_date(d/m/y) |
|---|---|---|
| 17 | 201 | 30/10/22 |
| 16 | 202 | 20/10/22 |
| 15 | 203 | 19/10/22 |
| 14 | 204 | 18/10/22 |
| 13 | 201 | 30/09/22 |
| 12 | 202 | 20/09/22 |
| 11 | 203 | 19/08/22 |
| 10 | 204 | 18/07/22 |
what I’m trying to get is the second highest date for each doctor’s appointment, for example
THIS IS THE TABLE I WANT TO CREATE (I don’t have this table)
(I’m trying to use zoho analytics to introduce this query)
| id_appoint | id_doc | app_date |
|---|---|---|
| 13 | 201 | 30/09/22 |
| 12 | 202 | 20/09/22 |
| 11 | 203 | 19/08/22 |
| 10 | 204 | 18/07/22 |
This doesn’t work because it only excludes the highest date of the whole table
SELECT id_doc, MAX( app_date )
FROM table1
GROUP BY id_doc
WHERE col < ( SELECT MAX( app_date )
FROM table1 )
>Solution :
You need to make the subquery correlated to the main query using a WHERE clause. And GROUP BY goes at the end.
SELECT id_doc, MAX( app_date )
FROM table1 AS t1
WHERE col < (SELECT MAX( app_date )
FROM table1 AS t2
WHERE t2.id_doc = t1.id_doc)
GROUP BY id_doc
Or join with the subquery.
SELECT t1.id_doc, MAX(t1.app_date)
FROM table1 AS t1
JOIN (
SELECT id_doc, MAX(app_date) AS maxdate
FROM table1
GROUP BY id_doc
) AS t2 ON t1.id_doc = t2.id_doc AND t1.app_date < t2.app_date
GROUP BY t1.id_doc