I am having a table name “raw”. The date column is not having all the dates of month as it does not record holidays or when there were no sales for the day. I am trying to get the data form the date less than a day of specific date or max date but it is not returning the search as before the max date was holiday. here are the dates: 2021-07-09 2021-07-07 2021-07-03 2021-07-02 2021-07-01 2021-06-30
x
SELECT *
FROM raw
WHERE date=(SELECT MAX(date) - 1 FROM raw);
or
SELECT *
FROM raw
WHERE date=(SELECT MAX(date) - interval 1 day FROM raw);
begin{table}[]
begin{tabular}{lll}
Name & Date & Sales \
ACC & 2020-07-09 & 2000 \
BEL & 2020-07-09 & 200 \
Dabur & 2020-07-09 & 600 \
ACC & 2020-07-07 & 450 \
GMR & 2020-07-07 & 12 \
ACC & 2020-07-03 & 450 \
ITC & 2020-07-03 & 45 \
Dabur & 2020-07-03 & 350 \
GMR & 2020-07-03 & 450 \
BEL & 2020-06-30 & 500 \
GTL & 2020-06-30 & 850 \
Dabur & 2020-06-30 & 100 \
ACC & 2020-06-27 & 50 \
Dabur & 2020-06-27 & 125
end{tabular}
end{table}
Advertisement
Answer
If you want the data from the day before a specific date, then use:
SELECT r.*
FROM raw r
WHERE r.date = (SELECT MAX(r2.date) FROM raw r2 WHERE r2.date < ?);
The ?
is the specific date.
For the date previous to the maximum date, you could use:
SELECT r.*
FROM raw r
WHERE r.date = (SELECT MAX(r2.date)
FROM raw r2
WHERE r2.date < (SELECT MAX(r2.date) FROM raw r3)
);
Ouch. Two levels of subqueries. That seems cumbersome. A simpler method is:
SELECT r.*
FROM raw r
WHERE r.date = (SELECT DISTINCT r2.date
FROM raw r2
ORDER BY r2.DATE DESC
LIMIT 1 OFFSET 1
);