SQL запрос

grek72

columnA ColumnB
 2007-01-10 10:30:00.000 27005.0000
2007-01-10 10:30:00.000 27094.0000
2007-01-10 10:30:00.000 27058.0000
2007-01-10 10:30:00.000 27050.0000
2007-01-10 10:30:00.000 27040.0000
2007-01-10 10:30:00.000 27040.0000
 2007-01-10 10:31:00.000 27039.0000
2007-01-10 10:31:00.000 27039.0000
2007-01-10 10:31:00.000 27037.0000
2007-01-10 10:31:00.000 27050.0000
2007-01-10 10:31:00.000 27020.0000
2007-01-10 10:31:00.000 27040.0000
 2007-01-10 10:32:00.000 27074.0000
2007-01-10 10:32:00.000 27073.0000
2007-01-10 10:32:00.000 27067.0000
2007-01-10 10:32:00.000 27074.0000
2007-01-10 10:32:00.000 27074.0000
2007-01-10 10:32:00.000 27051.0000
2007-01-10 10:32:00.000 27055.0000
как оставить только уникальное(первое) время? [mssql 2005]
Т.е. то, что выделенно жирным

sinet

Первое это какое? У тебя данные уже как-то отсортированы по какому-то третьему столбцу?

grek72

по первому(2007-01-10 10:32:00.000)

Fragaria

читай про group by, distinct

grek72

distinct - по всем проверяет -(

sinet

Просто уникальные времена что ли вывести?
или ты хочешь чтобы оно тебе вывело:
2007-01-10 10:30:00.000 27005.0000
2007-01-10 10:31:00.000 27039.0000
2007-01-10 10:32:00.000 27074.0000 ?

grek72

и соответствующие значения

Fragaria

select distinct в сочетании с group by field1 выведет тебе только первую строчку для каждого уникального field1, насколько я помню.

sinet

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

Fragaria

попробуй

SELECT DISTINCT columnA, columnB ORDER BY columnB GROUP BY columnA

sinet

Ошибку скажет, что columnB не входит в GROUP BY выражение.

Fragaria

ая бля, так они типа ещё и не отсортированы во втором столбике? тогда хз, можно попробовать без ORDER BY тогда... короче ковыряйся

qsk78

как оставить только уникальное(первое) время?
Записи в таблице не упорядочены, нельзя просто так говорить какая запись первая, а какая вторая, нужны какие-то дополнительные данные.
Если нужна просто уникальность, то почему бы не написать
SELECT columnA, min(columnB) GROUP BY columnA;

?

laki

записи отсортированы по времени

laki

вообщем переформулирую вопрос
из всех таких значений упорядоченных по времени надо получить
любой значение соответствующее
2007-01-10 10:31:00.000 любое из списка(логичнее первое)
2007-01-10 10:32:00.000 любое из списка(логичнее первое)
2007-01-10 10:33:00.000 любое из списка(логичнее первое)
2007-01-10 10:34:00.000 любое из списка(логичнее первое)

sinet

Ещё раз. Первое это какое?

Dasar

SELECT columnA, min(columnB) GROUP BY columnA

qsk78

записи отсортированы по времени
В данном случае это является отношением частичного порядка.

laki

сенкс большой

laki

а если?

columnA columnB columnC columnD columnE
2007-01-10 10:30:00.000 27058.0000 1 2007-01-10 10:30:29.000 0
2007-01-10 10:30:00.000 27040.0000 1 2007-01-10 10:30:39.000 0
2007-01-10 10:30:00.000 27040.0000 1 2007-01-10 10:30:49.000 0
2007-01-10 10:30:00.000 27039.0000 1 2007-01-10 10:30:56.000 0
2007-01-10 10:30:00.000 27040.0000 2 2007-01-10 10:30:46.000 0
2007-01-10 10:30:00.000 27008.0000 3 2007-01-10 10:30:49.000 0
2007-01-10 10:30:00.000 27050.0000 4 2007-01-10 10:30:29.000 0
2007-01-10 10:30:00.000 27005.0000 8 2007-01-10 10:30:27.000 0
2007-01-10 10:30:00.000 27050.0000 24 2007-01-10 10:30:56.000 0
2007-01-10 10:31:00.000 27050.0000 1 2007-01-10 10:31:04.000 0
2007-01-10 10:31:00.000 27040.0000 1 2007-01-10 10:31:20.000 0
2007-01-10 10:31:00.000 27040.0000 1 2007-01-10 10:31:46.000 0
2007-01-10 10:31:00.000 27049.0000 1 2007-01-10 10:31:49.000 0
2007-01-10 10:31:00.000 27050.0000 1 2007-01-10 10:31:51.000 0
2007-01-10 10:31:00.000 27020.0000 1 2007-01-10 10:31:53.000 0
2007-01-10 10:31:00.000 27039.0000 2 2007-01-10 10:31:00.000 0
2007-01-10 10:31:00.000 27049.0000 2 2007-01-10 10:31:04.000 0
2007-01-10 10:31:00.000 27050.0000 2 2007-01-10 10:31:32.000 0
2007-01-10 10:31:00.000 27049.0000 2 2007-01-10 10:31:49.000 0
2007-01-10 10:31:00.000 27037.0000 3 2007-01-10 10:31:04.000 0
2007-01-10 10:31:00.000 27037.0000 3 2007-01-10 10:31:15.000 0
2007-01-10 10:31:00.000 27050.0000 3 2007-01-10 10:31:32.000 0
2007-01-10 10:31:00.000 27050.0000 3 2007-01-10 10:31:44.000 0
2007-01-10 10:31:00.000 27020.0000 3 2007-01-10 10:31:53.000 0
2007-01-10 10:31:00.000 27040.0000 4 2007-01-10 10:31:04.000 0
2007-01-10 10:31:00.000 27040.0000 7 2007-01-10 10:31:32.000 0
2007-01-10 10:31:00.000 27050.0000 8 2007-01-10 10:31:53.000 0
2007-01-10 10:31:00.000 27050.0000 10 2007-01-10 10:31:13.000 0
2007-01-10 10:31:00.000 27050.0000 10 2007-01-10 10:31:36.000 0
2007-01-10 10:31:00.000 27050.0000 11 2007-01-10 10:31:04.000 0
2007-01-10 10:31:00.000 27050.0000 13 2007-01-10 10:31:32.000 0
2007-01-10 10:31:00.000 27050.0000 25 2007-01-10 10:31:12.000 0
2007-01-10 10:31:00.000 27050.0000 48 2007-01-10 10:31:20.000 0
2007-01-10 10:32:00.000 27067.0000 1 2007-01-10 10:32:02.000 0
2007-01-10 10:32:00.000 27051.0000 1 2007-01-10 10:32:09.000 0
2007-01-10 10:32:00.000 27060.0000 1 2007-01-10 10:32:50.000 0
2007-01-10 10:32:00.000 27050.0000 1 2007-01-10 10:32:55.000 0
2007-01-10 10:32:00.000 27050.0000 1 2007-01-10 10:32:58.000 0
2007-01-10 10:32:00.000 27050.0000 1 2007-01-10 10:32:59.000 0
2007-01-10 10:32:00.000 27073.0000 2 2007-01-10 10:32:02.000 0
2007-01-10 10:32:00.000 27074.0000 2 2007-01-10 10:32:09.000 0
2007-01-10 10:32:00.000 27075.0000 2 2007-01-10 10:32:29.000 0
2007-01-10 10:32:00.000 27070.0000 2 2007-01-10 10:32:45.000 0
2007-01-10 10:32:00.000 27055.0000 2 2007-01-10 10:32:50.000 0
2007-01-10 10:32:00.000 27055.0000 2 2007-01-10 10:32:57.000 0
2007-01-10 10:32:00.000 27051.0000 3 2007-01-10 10:32:09.000 0
2007-01-10 10:32:00.000 27070.0000 3 2007-01-10 10:32:45.000 0
2007-01-10 10:32:00.000 27055.0000 3 2007-01-10 10:32:55.000 0
2007-01-10 10:32:00.000 27050.0000 4 2007-01-10 10:32:58.000 0
2007-01-10 10:32:00.000 27050.0000 5 2007-01-10 10:32:58.000 0
2007-01-10 10:32:00.000 27075.0000 10 2007-01-10 10:32:22.000 0

Dasar

pk где?

sinet

select columnA, columnB, columnC, columnD, columnE from (
 select columnA, columnB, columnC, columnD, columnE, row_number over (partition by columnA order by columnE) as rn from table
) where rn=1

laki

во круто этот запрос работает в полтора раза быстрее сенкс.
Оставить комментарий
Имя или ник:
Комментарий: