49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
1

Выбрать все строки с разными значениями столбца

17.02.2016, 15:26. Показов 6039. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый.

Есть таблица:

id name time
1some_name2013-04-09 15:00:00.000
1some_name2013-04-09 15:01:00.000
1some_name2013-04-10 15:01:00.000
2some_name2013-04-09 15:00:00.000
2some_name2013-04-09 16:50:25.000
2some_name2013-04-10 15:01:00.000
3some_name2013-04-09 15:50:25.000
3some_name2013-04-09 16:50:25.000
3some_name2013-04-09 17:50:25.000
4some_name2013-04-09 15:59:59.000

Нужно выбрать по одной строке (любой) за каждый час с 2012 по 2015 год.
За час, это например с 12:00 по 12:59:59, миллисекунды можно не учитывать

Результат такой:

1some_name2013-04-09 15:00:00.000
2some_name2013-04-09 16:50:25.000
3some_name2013-04-09 17:50:25.000
1some_name2013-04-10 15:01:00.000

или например такой:
4some_name2013-04-09 15:59:59.000
2some_name2013-04-09 16:50:25.000
3some_name2013-04-09 17:50:25.000
1some_name2013-04-10 15:01:00.000
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2016, 15:26
Ответы с готовыми решениями:

Нужно вставить в таблицу данные с повторяющимися primary key, но разными значениями
create table Аптеки ( КодАптеки int not null, КодПрепарата int not null, Название nvarchar(50),...

все строки столбца в одной строке
мужики, кто знает как сделать другим способом без инструкции for xml path('') результат выборки...

В файле выбрать все строки, в которых значение 3-го столбца меньше 20
Привет всем!) Помогите пожалуйста! Нужно в файле qwery3 выбрать все строки, в которых значение...

Выбрать все строки по нескольким значениям из столбца, который содержит несколько значений
Помогите пожалуйста разобраться. Имеется стоблец color, которы может содержать сразу несколько...

8
1114 / 759 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
17.02.2016, 15:30 2
Пронумеровать строки внутри каждого часа, оставить только с номером 1
0
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
17.02.2016, 15:36  [ТС] 3
Цитата Сообщение от iap Посмотреть сообщение
Пронумеровать строки внутри каждого часа, оставить только с номером 1
Самому мне этого быстро не сделать.
0
1114 / 759 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
17.02.2016, 15:42 4
[time] какого типа?
0
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
17.02.2016, 15:46  [ТС] 5
[time] типа DATETIME
0
1114 / 759 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
17.02.2016, 15:49 6
T-SQL
1
2
3
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY ROW_NUMBER()OVER(PARTITION BY CONVERT(CHAR(13),[time],126) ORDER BY [time]);
И ещё несколько десятков способов...
Правда, не понял тайного смысла поля id и его роль во всём этом...
1
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
18.02.2016, 10:15  [ТС] 7
Ну что же, вроде все работает как надо.
Спасибо, сам бы точно не написал.
Однако мне надо еще точно знать что и как происходит.
Я расписал процесс так подробно, как понимаю.
Можете прочесть и указать на ошибки или дополнить, если чего-то важного не хватает?

T-SQL
1
2
3
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY ROW_NUMBER()OVER(PARTITION BY CONVERT(CHAR(13),[time],126) ORDER BY [time]);
Процесс:

1. Выбрать все из Т (назовем полученную выборку Т2).

2. Разбить результат выборки на сеции следующим образом:
Создать безымянный столбец (назовем [timeChar]) с типом CHAR(13)...
...и заполнить его значениями путем преобразования [time] по шаблону 126 в строку, взяв первые 13 символов
Все строки с одинаковым [timeChar] сделать отдельной секцией.
Отсортировать каждую секцию по [time].

3. Применить ROW_NUMBER() к каждой секции.
Т.е. пронумеровать по порядку строки в каждой секции.
Назовем полученный столбец нумерации [count].

4. Отсортировать строки Т2 по [count].
5. Взять первую строку из T2, а так же все остальные с тем же значением [count].
6. Отобразить полученное (за исключением вспомогательных столбцов, созданных после FROM).

Добавлено через 5 минут
Цитата Сообщение от iap Посмотреть сообщение
Правда, не понял тайного смысла поля id и его роль во всём этом...
Действительно, никакой роли поле id для этого запроса не играет.
Но в таблице у него есть свой смысл и с ним мне было гораздо проще создать правильный пример.
0
1114 / 759 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
18.02.2016, 10:52 8
Да. Всё правильно поняли.
Можно без TOP(1) WTH TIES.
В CTE (или производной таблице) включить в набор полей SELECTа написанный выше ROW_NUMBER()OVER().
После этого написать условие в WHERE запроса из CTE - [название поля с ROW_NUMBER()]=1;

Можно применить CROSS APPLY к подзапросу с SELECT TOP(1) ... WHERE ... ORDER BY ...
И т.д. и т.п.
Я бы дал вам ссылку на ресурс, где перечислены десятки решений,
но мне запрещено здесь давать ссылки на тот сайт (другие почему-то дают, и ничего...).
0
7 / 7 / 2
Регистрация: 24.02.2014
Сообщений: 178
18.02.2016, 13:33 9
Скиньте мне в личку,пож-та..
0
18.02.2016, 13:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2016, 13:33
Помогаю со студенческими работами здесь

Запрос: выбрать строки 1 столбца в зависимости от значений 1 столбца и 2 столбца
Здравствуйте. Прошу помочь в создании запроса. Название таблицы: Экзамены Столбцы таблицы: №...

Сколькими способами можно выбрать 3 вершины правильного n-угольника так, чтобы у треугольника все стороны были разными
Сколькими способами можно выбрать 3 вершины правильного n-угольника так что бы у образовавшегося...

Выбрать с первого столбца все уникальные значения
Собственно надо взять с первой колонки все уникальные значения, но... Есть фрагмент кода, который...

После каждого столбца, все элементы которого положи-тельные, добавить новый столбец и заполнить его нулевыми значениями
Помогите написать код. Условие - в программе не должно быть никаких квадратных скобок . Как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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