[SQL] для каждого datetime получить строку с минимальным N?
//здесь был неправильный запрос
а в MSSQL тоже стоит ограничение на количество результатов внутри IN?
а то если таблица большущая, то такой запрос свалится в оракле
select x.* from x left join x as y on (x.DateTime1 = y.DateTime1 and x.N > y.N) where y.N is null;
http://xpoint.ru/forums/computers/dbms/mysql/thread/30111.xh...
в таблице 9 миллионов
не правда!
в oracle есть ограничение на кол-во expession-ов, но не кол-во записей.
соответственно, если писать так:
select * from where a in ('a', 'b', 'c' и т.д то сработает ограничение,
если писать так
select * from where a in (select a from чего-то там) то никаких ограничений не будет
я как то писал такой запрос, он свалился
правда, я не стал разбираться почему
может там чего с памятью...
еще раз попадется, обязательно изучу вопрос
Всем спасибо, в понедельник попробую.
странноЯ такой использовал. Элементов в in было тыщ 20-40.
я как то писал такой запрос, он свалился
правда, я не стал разбираться почему
может там чего с памятью...
а это не то же самое, случаем?
SELECT ID,Nче то бред какой-то, этот запрос вернет не то что надо, ты наверное хотел что-то типа
FROM Query
WHERE N IN
(
SELECT MIN(N)
FROM Query
GROUP BY DateTime1
)
SELECT T1.*
FROM
T1
INNER JOIN
(
SELECT DateTime1, MIN(N) as MaxN
FROM T1
GROUP BY DateTime1
) T2
ON T1.DateTime1 = T2.DateTime1
AND T1.N = T2.MaxN
с этим тоже небольшая проблема, если запесей с минимальным значением несколько. Либо в подзапросе с помощью MIN/MAX выбирать остальные поля, либо нумеровать строки (ROW_NUMBER) но это лишняя сортировка.
select distinct DateTime1, min (N) over (partition by DateTime1) from Вьюха
?
там надо всю строку
всё работает, спасибо!
соответственно, если писать так:я помню у меня был огромный список кодов в екселе по которым надо было вытащить, я писал ещё в таком виде (креэйтнуть таблицу кодов и слить туда возможности не было):
select * from where a in ('a', 'b', 'c' и т.д то сработает ограничение,
если писать так
select * from where a in (select a from чего-то там) то никаких ограничений не будет
select * from where a in (код1,код2, код3, ..., кодN)
or a in (кодN+1, кодN+2, ..., кодN+N)
or и т.д.
select Код1 from dual
union
...
union
select КодN from dual
Оставить комментарий
grek72
Есть вьюха, которая возвращает:надо выбрать для каждого уникального значения DateTime1 строку с минимальным N.