Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
[Bicycle Reinventor]
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
1

Выборка изменения по столбцу

22.06.2015, 14:32. Показов 736. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравия форумчанам!

Имеется база mysql, в ней таблица tbl_geodata с кучей данных, в которой есть есть: primary key id, timestamp типа datetime, imei типа varchar(20) и, главное, столбец ver_fw типа varchar(16) (и прочие не интересующие нас поля).

Я делаю запрос следующего вида:
MySQL
1
2
3
SELECT id,timestamp,ver_fw
FROM tbl_geodata
WHERE imei LIKE '353227026533507'
и получаю в ответ овер 2к строк результата, часть которого выглядит следующим образом:
Код
+------+---------------------+--------+
| id   | timestamp           | ver_fw |
+------+---------------------+--------+
| 1457 | 2014-09-15 14:07:03 | 2.5.0  |
| 1458 | 2014-09-15 14:15:33 | 2.5.0  |
| 1459 | 2014-09-15 14:22:48 | 2.5.0  |
| 1460 | 2014-09-15 14:45:21 | 2.5.0  |
| 1461 | 2014-09-15 14:46:44 | 2.5.0  |
| 1462 | 2014-09-15 14:48:25 | 2.5.0  |
| 1463 | 2014-09-15 14:49:48 | 2.5.0  |
| 1464 | 2014-09-15 14:52:58 | 2.5.0  |
| 1465 | 2014-09-15 15:01:36 | 2.5.0  |
| 1466 | 2014-09-15 15:06:52 | 2.5.0  |
| 1467 | 2014-09-15 15:08:29 | 2.5.0  |
| 1468 | 2014-09-15 15:19:36 | 2.5.0  |
| 1469 | 2014-09-15 16:35:46 | 2.5.2  |
| 1470 | 2014-09-15 16:52:58 | 2.5.2  |
| 1471 | 2014-09-15 17:14:47 | 2.5.2  |
| 1472 | 2014-09-15 17:52:59 | 2.5.3  |
| 1473 | 2014-09-16 09:51:59 | 2.5.3  |
| 1474 | 2014-09-16 09:53:16 | 2.5.3  |
| 1475 | 2014-09-16 09:54:33 | 2.5.3  |
| 1476 | 2014-09-16 09:55:47 | 2.5.3  |
| 1477 | 2014-09-16 09:57:03 | 2.5.3  |
| 1478 | 2014-09-16 09:58:17 | 2.5.3  |
| 1479 | 2014-09-16 09:59:33 | 2.5.3  |
| 1480 | 2014-09-16 10:00:48 | 2.5.3  |
| 1481 | 2014-09-16 10:02:02 | 2.5.3  |
| 1482 | 2014-09-16 10:03:18 | 2.5.3  |
| 1483 | 2014-09-16 10:07:52 | 2.5.3  |
| 1484 | 2014-09-16 10:09:11 | 2.5.3  |
| 1485 | 2014-09-16 10:10:27 | 2.5.3  |
| 1486 | 2014-09-16 10:11:40 | 2.5.3  |
| 1487 | 2014-09-16 10:12:53 | 2.5.3  |
| 1488 | 2014-09-16 10:14:06 | 2.5.3  |
| 1489 | 2014-09-16 10:15:20 | 2.5.3  |
| 1490 | 2014-09-16 10:16:36 | 2.5.3  |
| 1491 | 2014-09-16 10:17:50 | 2.5.3  |
| 1492 | 2014-09-16 10:19:03 | 2.5.3  |
| 1493 | 2014-09-16 10:20:19 | 2.5.3  |
| 1494 | 2014-09-16 10:21:33 | 2.5.3  |
| 1495 | 2014-09-16 10:22:50 | 2.5.3  |
| 1496 | 2014-09-16 10:24:16 | 2.5.3  |
| 1497 | 2014-09-16 10:25:32 | 2.5.3  |
| 1498 | 2014-09-16 10:26:50 | 2.5.3  |
| 1499 | 2014-09-16 10:28:07 | 2.5.3  |
| 1500 | 2014-09-16 10:29:22 | 2.5.3  |
| 1501 | 2014-09-16 10:30:40 | 2.5.3  |
| 1502 | 2014-09-16 10:31:54 | 2.5.3  |
| 1503 | 2014-09-16 10:33:08 | 2.5.3  |
| 1504 | 2014-09-16 10:34:20 | 2.5.3  |
| 1505 | 2014-09-16 10:35:31 | 2.5.3  |
| 1506 | 2014-09-16 10:36:45 | 2.5.3  |
+------+---------------------+--------+
Что мне требуется: на основе этих данных сделать выборку, в которой были бы только строки, в которых ver_fw изменяется с любого предыдущего значения на новое. Для данного примера результат был бы таким:
Код
+------+---------------------+--------+
| id   | timestamp           | ver_fw |
+------+---------------------+--------+
| 1457 | 2014-09-15 14:07:03 | 2.5.0  |
| 1469 | 2014-09-15 16:35:46 | 2.5.2  |
| 1472 | 2014-09-15 17:52:59 | 2.5.3  |
+------+---------------------+--------+
Таким образом, ver_fw меняется 2.5.0 -> 2.5.2 -> 2.5.3. Дополнительной сложности добавляет тот факт, что ver_fw может меняться туда-сюда на повторяющиеся значения, и все изменения нужно отобразить (могло быть и так: 2.5.0 -> 2.5.1 -> 2.5.0 -> 2.5.3 -> 2.5.0 -> 2.5.7). Т.е. просто сделать выборку по уникальным ver_fw не получится.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2015, 14:32
Ответы с готовыми решениями:

Выборка в SQL по столбцу
Все привет. Вот столкнулся с такам. В текстомов поле слова через запятую и пробел вот так textBox...

Выборка с группировкой по столбцу
Есть такая простенькая табличка CREATE TABLE . ( int IDENTITY(1, 1) NOT NULL, varchar(30)...

Excell 2003 Выборка по столбцу
Табель учета рабочего времени Лист 1: Столбец1 список фамилий; Столбец2 буква, определюящая...

Vba протянуть формулу по столбцу С до последней ячейки по столбцу D
всем доброго времени суток Уважаемые профи,подскажите,пожалуйста, такой вопрос: в ячейке С1...

2
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
22.06.2015, 20:37 2
FAQ: Выборка первой/последней записи в группах
группы - по ver_fw,
первая в группе - по timestamp (или по id - по желанию)

Добавлено через 3 минуты
PS. не сработает, если группы через какое-то время повторяются

В этом случае можно во вложенном запросе перенумеровать внутри группы в порядке timestamp, затем во внешнем запросе отфильтровать по номеру 1.
Для нумерации можно воспользоваться переменными, примеров как это сделать много.
0
[Bicycle Reinventor]
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
22.06.2015, 22:06  [ТС] 3
Уже ответили в другом месте.
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT id, `timestamp`, ver_fw
FROM (
  SELECT id, `timestamp`, ver_fw,
         IF ( @prev_ver <> ver_fw, 
             IF (@prev_ver := ver_fw, 1, 1),
             IF (@prev_ver := ver_fw, 0, 0)) AS IsDifferent
  FROM tbl_geodata
  CROSS JOIN (SELECT @prev_ver := '-1') AS var
  WHERE imei LIKE '353227026533507'
  ORDER BY `timestamp` ) t
WHERE IsDifferent = 1
ORDER BY `timestamp`
0
22.06.2015, 22:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2015, 22:06
Помогаю со студенческими работами здесь

Найти среднее арифметическое элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.
Дан двумерный массив размером n*m, заполненный случайными числами. Найти среднее арифметическое...

В прямоугольной матрице найти сумму элементов, принадлежащих первой строке, последней строке, первому столбцу и последнему столбцу.
7.6.2. Помогите, пожалуйста, решить задачу в С++. В прямоугольной матрице найти сумму...

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

Выборка без ключевых слов/Выборка без столбцов/Выборка с условием
Нужно сделать 2 типа выборки в отдельный столбец: #1 без ключевых слов типа &quot;АРБУЗ, ДЫНЯ&quot; #2 без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru