2016-03-08 3 views
2

Как я могу извлечь FIRST «StartAddress» для каждого дня. Из таблицы ниже.MYSQL: Как извлечь следующие данные из таблицы?

Результат должен выглядеть следующим образом.

+------------+---------------+--------------------+--------------------+ 
| Date  | SamplingStart | StartAddress  | StopAddress  | 
+------------+---------------+--------------------+--------------------+ 
| 2016-02-22 | 08:00:00  | 26 Riverside Drive | 70 Piet Retief  | 
| 2016-02-23 | 05:15:00  | Balizza   | Mars    | 
+------------+---------------+--------------------+--------------------| 

Таблица:

+------------+---------------+--------------------+--------------------+ 
| Date  | SamplingStart | StartAddress  | StopAddress  | 
+------------+---------------+--------------------+--------------------+ 
| 2016-02-22 | 08:00:00  | 26 Riverside Drive | 70 Piet Retief  | 
| 2016-02-22 | 09:00:00  | 10 Glen Drive  | 16 Olga Street  | 
| 2016-02-22 | 10:00:00  | 66 Bremerhof  | 26 Bluewater Drive | 
| 2016-02-22 | 11:00:00  | 7 New Street  | Walker Drive  | 
| 2016-02-22 | 13:00:00  | Goodwood Street | Blouberg   | 
| 2016-02-22 | 15:00:00  | Marine Drive  | William Moffet  | 
| 2016-02-22 | 18:00:00  | Jumanji   | Paterson   | 
| 2016-02-23 | 07:00:00  | 25 Eazi Street  | 70 Kings Street | 
| 2016-02-23 | 07:20:00  | Cool Blue   | Pick n Pay   | 
| 2016-02-23 | 05:15:00  | Balizza   | Mars    | 
| 2016-02-23 | 20:15:00  | Neverland   | Club Shakes  | 
| 2016-02-23 | 23:15:00  | Castros   | Stones    | 
| 2016-02-23 | 14:45:00  | Seagate   | Ermelo    | 
| 2016-02-23 | 16:30:00  | Mafikeng   | Goodwood   | 
+------------+---------------+--------------------+--------------------+ 
+0

Использовать группу по столбцу «Дата». –

ответ

1

Вы можете использовать NOT EXISTS()

SELECT t.* 
FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE t.date = s.date 
        and t.SamplingStart > s.SamplingStart) 
1

Вы можете добиться этого путем добавления номера строки для каждой даты.

Запрос

select t.`Date`, t.SamplingStart, t.StartAddress, t.StopAddress from 
(
    select `Date`,SamplingStart, StartAddress, StopAddress, 
    (
     case `Date` when @curA 
     then @curRow := @curRow + 1 
     else @curRow := 1 and @curA := `Date` end 
    ) as rn 
    from your_table_name t, 
    (select @curRow := 0, @curA := '') r 
    order by `Date`, SamplingStart 
)t 
where t.rn = 1; 

SQL Fiddle demo

2

Попробуйте это:

SELECT 
    * 
FROM 
    tbl 
WHERE 
    (Date, SamplingStart) IN 
    (
     SELECT tbl2.Date, MIN(tbl2.SamplingStart) 
     FROM tbl tbl2 
     WHERE tbl.Date = tbl2.Date 
    ); 
1
Select Date, MIN(SamplingStart) AS SamplingStart, StartAddress, StopAddress 
from Table Group By Date; 
+0

Добро пожаловать, и спасибо за ваш ответ. Всегда объясняйте только коды. Что вы изменили, и каков эффект? Благодарю. –

Смежные вопросы