Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
create table tttt
(c1 char(5),
 c2 int,
 c3 int,
 c4 int)

delete tttt
insert tttt values('A',1,8,11)
insert tttt values('A',5,8,12)
insert tttt values('A',3,10,13)
insert tttt values('A',5,9,14)
insert tttt values('A',5,8,15)

select * from tttt
нужно выбрать - А 5 9 14
как вариант можно так:
select t4.c1, t4.c2, t4.c3, max(t4.c4) from tttt t4
inner join 
        (select t.c1,t.c2,max(t.c3) as max3 from tttt t
	inner join 
	 (select c1,max(c2) as max2 
	  from tttt 
	  group by c1) t1
	on t1.c1=t.c1 and t1.max2=t.c2
	group by t.c1,t.c2) t3
on t3.c1=t4.c1 and t3.c2=t4.c2 and t3.max3=t4.c3
group by t4.c1, t4.c2, t4.c3
нужно избавиться от вложенных запросов. Это возможно?
29 июл 09, 09:34    [7471951]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
select top 1 with ties * from tttt order by c1 desc, c2 desc, c3 desc, c4 desc;
29 июл 09, 09:46    [7472006]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Спасибо, но боюсь в той нотации (не MS SQL) в которой я собирался это использовать нет top 1 with ties ((
29 июл 09, 10:15    [7472203]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
а что должно получиться на таких данных?
insert tttt values('A',1,8,11)
insert tttt values('A',5,8,12)
insert tttt values('A',3,10,13)
insert tttt values('A',5,9,14)
insert tttt values('A',5,8,15)
insert tttt values('B',2,6,10)
insert tttt values('B',1,8,14)
insert tttt values('B',3,10,13)
insert tttt values('C',2,9,14)
insert tttt values('C',5,8,13)
insert tttt values('C',5,6,15)
29 июл 09, 10:17    [7472215]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Intensiv
не MS SQL


А сразу СУБД назвать сложно?
И почему вообще Вы задаете вопрос на форуме по MS SQL, если у Вас не MS SQL?
29 июл 09, 10:25    [7472261]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Паганель
Intensiv
не MS SQL


А сразу СУБД назвать сложно?
И почему вообще Вы задаете вопрос на форуме по MS SQL, если у Вас не MS SQL?


Это Infor BAAN 6.1 SP2, тут к сожалению нет по нему ничего. Извините что сразу не написал.
29 июл 09, 10:33    [7472297]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
PaulYoung
а что должно получиться на таких данных?

A 5 9 14
B 3 10 13
C 5 8 13
29 июл 09, 10:35    [7472309]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
И вложенные запросы он тоже не может, только совсем примитивные.
29 июл 09, 10:40    [7472332]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Intensiv
Это Infor BAAN 6.1 SP2
Насколько я смог нагуглить, это не СУБД, а какая-то система учета(или управления), базирующаяся, скорее всего, на какой-то СУБД

Повторяю вопрос - для какой СУБД запрос нужен?
29 июл 09, 10:45    [7472364]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Она может работать на разных СУБД (MS SQL, DB2, Informix, в моем случае Oracle), но за общение с БД отвечает прослойка, так называемый Porting Set, для каждой БД есть свой. Он то и определяет синтаксис SQL. На уровне разработки система получается БД независима.
29 июл 09, 10:55    [7472421]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Для каждой СУБД делаете хранимку на ее языке
А ваша "незалежная" среда пусть просто дергает хранимку и получает нужный результат
Это-то она умеет?
29 июл 09, 10:56    [7472434]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Glory
Member

Откуда:
Сообщений: 104760
Intensiv
Она может работать на разных СУБД (MS SQL, DB2, Informix, в моем случае Oracle), но за общение с БД отвечает прослойка, так называемый Porting Set, для каждой БД есть свой. Он то и определяет синтаксис SQL. На уровне разработки система получается БД независима.

Без подзапросов или top ваша задача не решается
Делайте select * from tttt order by c1 desc, c2 desc, c3 desc, c4 desc; и отображайте первую запись силами клиентского приложения
29 июл 09, 10:56    [7472436]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Паганель
Для каждой СУБД делаете хранимку на ее языке
А ваша "незалежная" среда пусть просто дергает хранимку и получает нужный результат
Это-то она умеет?
Не умеет.
29 июл 09, 11:04    [7472488]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Glory,

Да, видимо так и придется, спасибо. Я думаю можно закрывать.
29 июл 09, 11:06    [7472501]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
В БД делаем что-то типа
create view v_tttt as
select top 1 with ties * from tttt 
order by row_number() over(partition by c1 order by c2 desc, c3 desc, c4 desc)
А в среде Вашей
select * from v_tttt
Так пойдет?
29 июл 09, 11:13    [7472568]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Паганель,

Нет, там нет прямого доступа к объектам базы, только через свой Data Dictionary.
Если интересно то:
Informal syntax

SELECT <select list>
FROM <from list>
[ WHERE <search condition> ]
[ GROUP BY <group list>
[ HAVING <search condition> ] ]
[ SUBHINT ... ]
[ UNION [ALL]
SELECT <select list>
FROM <from list>
[ WHERE <search condition> ]
[ GROUP BY <group list>
[ HAVING <search condition> ] ]
[ SUBHINT ... ]
] ...
[ ORDER BY <order by list> [ WITH RETRY [REPEAT LAST ROW] ]]
[ <set specification> ]
[ HINT ... ]

+ конструкция после select-а
selectdo <........> endselect которая работает как курсор, ее и буду использовать.
29 июл 09, 11:41    [7472797]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Intensiv
Нет, там нет прямого доступа к объектам базы
Подключитесь к БД посредством SSMS и создайте эту вьюху оттуда
(если нет соотв. полномочий - попросите того кто за БД отвечает, пусть сделает это за Вас, вьюха ж повредить базе не может...имхо)

а из-под среды просто select , я вижу он в Вашем "Informal syntax" есть
29 июл 09, 11:47    [7472841]     Ответить | Цитировать Сообщить модератору
 Re: Несколько максимумов  [new]
Intensiv
Member

Откуда:
Сообщений: 59
Паганель,

НЕПОЛУЧИТСЯ. нет проблем создать view, проблема в том что в среде ее видно не будет. В DD нет возможности создавать VIEW/, да и проблема уже решилась, не очень красиво, но работает ))
29 июл 09, 11:58    [7472924]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить