mysql:如何获取列的最后一个值,以及同一个表中另一个coumn的第一个值?

时间:2016-02-23 13:46:33

标签: mysql

我怎样才能通过一个查询

从下表中检索以下数据
  1. MIN(SamplingStart) -
  2. First StartAddress // [WHERE StartAddress = MIN(SamplingStart)] -
  3. Last StartAddress // [WHERE StartAddress = MAX(SamplingStart)]
  4. 这是我到目前为止的代码。问题在于上面的数字3。如果1,2必须仍然有效,我怎样才能得到3号工作。

    **The result must look like this.**
    
    +-----------+--------------------+----------------+
    | StartTime | StartAddress       | StopAddress    |
    +-----------+--------------------+----------------+
    | 08:00:00  | 26 Riverside Drive | Paterson       |
    +-----------+--------------------+----------------
    
    **Existing Code to modify.**
    
    SELECT 
    
    MIN(SamplingStart) AS StartTime,
    StartAddress AS StartAddress, 
    StopAddress AS StopAddress
    
    FROM table1;
    
    
    ****table1****
    +---------------+--------------------+--------------------+
    | SamplingStart | StartAddress       | StopAddress        |
    +---------------+--------------------+--------------------+
    | 08:00:00      | 26 Riverside Drive | 70 Piet Retief     |
    | 09:00:00      | 10 Glen Drive      | 16 Olga Street     |
    | 10:00:00      | 66 Bremerhof       | 26 Bluewater Drive |
    | 11:00:00      | 7 New Street       | Walker Drive       |
    | 13:00:00      | Goodwood Street    | Blouberg           |
    | 15:00:00      | Marine Drive       | William Moffet     |
    | 18:00:00      | Jumanji            | Paterson           |
    +---------------+--------------------+--------------------
    

2 个答案:

答案 0 :(得分:1)

您可以使用条件聚合:

SELECT MIN(SamplingStart) AS StartTime,
       MAX(CASE WHEN SamplingStart = StartTime THEN StartAddress END) AS StartAddress, 
       MAX(CASE WHEN SamplingStart = EndTime THEN StopAddress END) AS StopAddress
FROM table1 t1 CROSS JOIN
     (SELECT MIN(SamplingStart) AS StartTime, MAX(SamplingStart) AS ENDTime
      FROM table1
     ) tt

答案 1 :(得分:0)

我会这样做(我知道这不仅仅是一个查询,而是......):

SELECT 
MIN(SamplingStart) AS StartTime,
StartAddress AS StartAddress, 
(select StopAddress from table1 order by SamplingStart desc limit 0,1) as StopAddress

FROM table1 ;