首页 > 解决方案 > mySQL Select All where date is less than 1 day from max date in data

问题描述

我有一个表名“raw”。日期列没有包含月份的所有日期,因为它没有记录假期或当天没有销售。我正在尝试从小于特定日期或最大日期的日期获取数据,但它没有像最大日期是假期之前那样返回搜索。以下是日期: 2021-07-09 2021-07-07 2021-07-03 2021-07-02 2021-07-01 2021-06-30

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}

标签: mysqlsql

解决方案


如果您想要特定日期前一天的数据,请使用:

SELECT r.*
FROM raw r
WHERE r.date = (SELECT MAX(r2.date) FROM raw r2 WHERE r2.date < ?);

?是具体日期。

对于最大日期之前的日期,您可以使用:

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)
               );

哎哟。两个级别的子查询。这似乎很麻烦。一个更简单的方法是:

SELECT r.*
FROM raw r
WHERE r.date = (SELECT DISTINCT r2.date
                FROM raw r2
                ORDER BY r2.DATE DESC
                LIMIT 1 OFFSET 1
               );

推荐阅读