我有这个数据库,其中包含有关积雪深度的观察结果。结构是这样的:
+--------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| DATE_OBS | date | NO | | NULL | |
| SNOW_DEPTH | int(4) | NO | | NULL | |
+--------------+---------+------+-----+---------+----------------+
以及数据样本:
+------+------------+--------------+
| ID | DATE_OBS | SNOW_DEPTH |
+------+------------+--------------+
| 1 | 2002-01-01 | 58 |
| 2 | 2002-01-01 | 58 |
| 3 | 2002-01-02 | 61 |
| 4 | 2002-01-03 | 60 |
| 5 | 2002-01-04 | 64 |
************************************
| 4563 | 2014-06-28 | 0 |
| 4564 | 2014-06-29 | 0 |
| 4565 | 2014-06-30 | 0 |
+------+------------+--------------+
4565 rows in set (0.01 sec)
我想知道是否有可能从我的数据中得到关于第一次有记录的雪的一些信息,以及最后一次有雪覆盖的记录日。 我尝试过DISTINCT语句,但没有运气。
感谢。
答案 0 :(得分:0)
SELECT ID, 'FIRST_SNOW' TYPE, MIN(DATE_OBS) , SNOW_DEPTH FROM MY_TABLE
UNION
SELECT ID, 'LAST_SNOW' TYPE, MAX(DATE_OBS) , SNOW_DEPTH FROM MY_TABLE
OR
SELECT ID, DATE_OBS, SNOW_DEPTH, 'FIRST_SNOW' TYPE FROM MY_TABLE ORDER BY DATE_OBS ASC LIMIT 1
UNION
SELECT ID, DATE_OBS, SNOW_DEPTH, 'LAST_SNOW' TYPE FROM MY_TABLE ORDER BY DATE_OBS DESC LIMIT 1
答案 1 :(得分:0)
假设您想要第一个和最后一个日期的所有记录(或者操纵它们以获得第一天和最后一天的平均值或相似值): -
SELECT a.ID, a.DATE_OBS, a.SNOW_DEPTH
(
SELECT MIN(DATE_OBS) AS min_date
FROM some_table
) sub0
INNER JOIN some_table a
ON a.DATE_OBS = sub0.min_date
UNION
SELECT a.ID, a.DATE_OBS, a.SNOW_DEPTH
(
SELECT MAX(DATE_OBS) AS max_date
FROM some_table
) sub0
INNER JOIN some_table a
ON a.DATE_OBS = sub0.max_date
如果您只想要第一个或最后一个记录,请使用 juergen d
的建议