从数据中获取第一个记录的发生日期

时间:2014-07-09 10:12:50

标签: mysql sql

我有这个数据库,其中包含有关积雪深度的观察结果。结构是这样的:

+--------------+---------+------+-----+---------+----------------+
| 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语句,但没有运气。

感谢。

2 个答案:

答案 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

的建议
相关问题