【发布时间】:2021-07-28 12:36:43
【问题描述】:
我有一个 MariaDB 天气数据库,它每 15 分钟根据当前情况更新一次。我正在尝试查询它以返回特定月份的最高温度。 当我使用“从表中选择临时,日期时间”查询它时,我会得到所有临时和记录时间的列表。我可能会在一个小时左右的时间内以 15 分钟的时间间隔获得 3-4 条相同温度的记录。 为了得到一个特定的月份,我尝试了“SELECT temp,logdatetime FROM Monthly WHERE logdatetime like '2020-01%' ORDER BY temp desc”我得到了我的期望。 (日期时间格式为 YYYY-MM-DD HH:mm:ss)
| temp | logDateTime |
|---|---|
| 40.2 | 2020-01-04 16:15:00 |
| 40.1 | 2020-01-04 15:30:00 |
| 40.1 | 2020-01-04 17:00:00 |
| 40.1 | 2020-01-04 17:30:00 |
| 40.1 | 2020-01-31 16:15:00 |
| 40.0 | 2020-01-04 16:45:00 |
| 40.0 | 2020-01-31 16:00:00 |
如果我尝试“SELECT max(temp),logdatetime FROM Monthly WHERE logdatetime like '2020-01%'”,结果是;
| temp | logdatetime |
|---|---|
| 40.2 | 2020-01-01 00:00:00 |
在此示例中,日期错误地返回为 1 月 1 日而不是 1 月 4 日,并且缺少时间。 40.2 只有一个条目,所以它不应该返回时间。我了解如果有多个临时文件,至于 40.1,返回四个日期可能会出现问题。
我还尝试了如下的嵌套选择语句,结果相同。 SELECT max(a.temp), LogDateTime FROM (SELECT temp, logdatetime FROM Monthly WHERE logdatetime like '2020-01%') AS a
非常感谢任何帮助。 彼得
【问题讨论】:
-
WHERE logdatetime like '2020-01%' 永远不要这样做。使用
WHERE logdatetime BETWEEN '2020-01-01 00:00:00' AND '2020-01-31 23:59:59'。 -
如果我尝试 "SELECT max(temp),logdatetime FROM Monthly WHERE logdatetime like '2020-01%'" 那么你就犯了一个逻辑错误。