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

Откуда:
Сообщений: 22
И на mysql ни кто ни ругался на агрегатную функцию и запрос правильно выводил цену
Выборка на MySql
SELECT lost.namea
, lost.datad
, hour(lost.timed) AS timedH
, minute(lost.timed) AS timedM
, max(second (lost.timed)) AS timedS
, lost.priced <<< главное цена то есть выбрав опр интервал времени мне нужно выдать ее цену.
FROM lost
GROUP BY
namea
, datad
, timedH
, timedM

А вот на MS SQL он требует lost.priced или дать агрегатную функцию или с группировать но если это сделать то результат будет ложным. как поступить.

Выборка на MsSql
SELECT dbo.lost.namea
, dbo.lost.datad
, dbo.lost.Priced
, DATEPART (hour, lost.timed) AS timedH
, DATEPART (minute, lost.timed) AS timedM
, Max(DATEPART (second, lost.timed)) AS timedS
, lost.priced <<< главное цена то есть выбрав опр интервал времени мне нужно выдать ее цену.
FROM
dbo.lost
GROUP BY
namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed)
15 май 12, 12:23    [12555574]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gares
lost.priced <<< главное цена то есть выбрав опр интервал времени мне нужно выдать ее цену.
Т.е. фам пофиг, какая из стопятисот возможных цен в группе должна выводиться? Напишите min или max тогда.
15 май 12, 12:27    [12555604]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Нет не по фиг если я напишу мин или мах то тогда на опр интервал времени будет мах или минимальная цена а мне нужна последняя цена например за минуту
15 май 12, 12:30    [12555629]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Выборка говорит выбери час, минуту, объедении их и скажи какая была из этого самая большая цифра из секунд и покажи мне на эту секунду цену.
15 май 12, 12:32    [12555648]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gares
Нет не по фиг если я напишу мин или мах то тогда на опр интервал времени будет мах или минимальная цена а мне нужна последняя цена например за минуту
А MySQL такой умный, что прямо из вашей головы угадывал, что вам "нужна последняя цена например за минуту"? O_o
15 май 12, 12:33    [12555660]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
gares
Нет не по фиг если я напишу мин или мах то тогда на опр интервал времени будет мах или минимальная цена а мне нужна последняя цена например за минуту
А MySQL такой умный, что прямо из вашей головы угадывал, что вам "нужна последняя цена например за минуту"? O_o

Ну я ему указал опр выборку он и показывал.
15 май 12, 12:36    [12555687]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SELECT dbo.lost.namea
, dbo.lost.datad
, DATEPART (hour, lost.timed) AS timedH
, DATEPART (minute, lost.timed) AS timedM
, Max(DATEPART (second, lost.timed)) AS timedS
, priced = ( 
    select top 1
        x.priced
    from dbo.lost x 
    where 
        a.namea = x.namea 
        and a.datad = x.datad 
        and DATEPART (hour, a.[lost.timed)] = DATEPART (hour, x.[lost.timed)] 
        and DATEPART (minute, a.[lost.timed]) = DATEPART (minute, a.[lost.timed]) 
    order by x.[lost.timed] desc
)
FROM
dbo.lost a
GROUP BY
namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed) 


Правда, сие будет, мягко говоря, не быстро.

Сообщение было отредактировано: 15 май 12, 12:42
15 май 12, 12:41    [12555724]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
а в этом запросе как-то предусмотрено, что группировка идет за ,DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed) - т.е. за каждую минуту по всем дням. Т.е. если остальные поля группировки это дело разруливают, то хорошо, а так довольно сумбурный запрос получается.
15 май 12, 12:44    [12555744]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
SELECT dbo.lost.namea
, dbo.lost.datad
, DATEPART (hour, lost.timed) AS timedH
, DATEPART (minute, lost.timed) AS timedM
, Max(DATEPART (second, lost.timed)) AS timedS
, priced = ( 
    select top 1
        x.priced
    from dbo.lost x 
    where 
        a.namea = x.namea 
        and a.datad = x.datad 
        and DATEPART (hour, a.[lost.timed)] = DATEPART (hour, x.[lost.timed)] 
        and DATEPART (minute, a.[lost.timed]) = DATEPART (minute, a.[lost.timed]) 
    order by x.[lost.timed] desc
)
FROM
dbo.lost a
GROUP BY
namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed) 


Правда, сие будет, мягко говоря, не быстро.


на конструкцию ругается начиная с priced = ( select .......
15 май 12, 12:55    [12555863]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gares
на конструкцию ругается начиная с priced = ( select .......
Матом?
15 май 12, 12:59    [12555910]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Двух закрывающих скобок не хватает: "and DATEPART (hour, a.[lost.timed)] = DATEPART (hour, x.[lost.timed)] "
15 май 12, 13:00    [12555926]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
да по разному ну в общем то мне большего не нужно логика ясна спасибо.
думал можно будет как то по проще все это реализовать .... еще раз спасибо

Сообщение 102, уровень 15, состояние 1, строка 27
Неправильный синтаксис около конструкции "=".
Сообщение 156, уровень 15, состояние 1, строка 34
Неправильный синтаксис около ключевого слова "order".
15 май 12, 13:02    [12555935]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
SELECT lost.namea
, lost.datad
, hour(lost.timed) AS timedH
, minute(lost.timed) AS timedM
, max(second (lost.timed)) AS timedS
, lost.priced <<< главное цена то есть выбрав опр интервал времени мне нужно выдать ее цену.
FROM lost
GROUP BY
namea
, datad
, timedH
, timedM

MySQL нереально крут если ЭТО там работает !!!
15 май 12, 13:15    [12556063]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ivan Durak
MySQL нереально крут если ЭТО там работает !!!
Оно там, вроде, действительно работает, и так уж получилось, что даже возвращает последнюю запись в группе. Правда, автору невдомек, что так чисто случайно получилось, и что не факт, что MySQL всегда возвращает последнюю запись.

Сообщение было отредактировано: 15 май 12, 13:21
15 май 12, 13:21    [12556117]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
Ivan Durak
MySQL нереально крут если ЭТО там работает !!!
Оно там, вроде, действительно работает, и так уж получилось, что даже возвращает последнюю запись в группе. Правда, автору невдомек, что так чисто случайно получилось, и что не факт, что MySQL всегда возвращает последнюю запись.


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

к примеру

машина 15.05.2012 13столбец часа 27 мин столбец 58секунд 5000 рублей <<<< так вот если последния покупка была 58 секунду и больше ее не было он другое не покажет!!!!

если бы было бы 35 секунд в которую совершилась то он бы и ее показал
15 май 12, 13:28    [12556188]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
gares
а кукую еще он может вы водить если я хочу максимальную секунду имя обьединил, дату тоже час и минуту а секунда из этого набора маскимальна вот он и тянет за ней цену.

к примеру

машина 15.05.2012 13столбец часа 27 мин столбец 58секунд 5000 рублей <<<< так вот если последния покупка была 58 секунду и больше ее не было он другое не покажет!!!!

если бы было бы 35 секунд в которую совершилась то он бы и ее показал
А если бы вы хотели минимальную дату последнюю цену, то прочитал бы это из вашего мозга и MySQL лопнул бы от невозможности сделать правильный выбор?

Сообщение было отредактировано: 15 май 12, 13:36
15 май 12, 13:36    [12556264]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
gares
а кукую еще он может вы водить если я хочу максимальную секунду имя обьединил, дату тоже час и минуту а секунда из этого набора маскимальна вот он и тянет за ней цену.

к примеру

машина 15.05.2012 13столбец часа 27 мин столбец 58секунд 5000 рублей <<<< так вот если последния покупка была 58 секунду и больше ее не было он другое не покажет!!!!

если бы было бы 35 секунд в которую совершилась то он бы и ее показал
А если бы вы хотели минимальную дату последнюю цену, то прочитал бы это из вашего мозга и MySQL лопнул бы от невозможности сделать правильный выбор?

ни кто и не запрещает разложить дату на самую последнею в которой была цена к примеру 12.05.1959 год до 15.05.2012
то первая дата меньше чем последняя и тут не нужен супер пупер моСК и если в 1959 году была покупка то ее и покажет
15 май 12, 13:42    [12556352]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
gares
а кукую еще он может вы водить если я хочу максимальную секунду имя обьединил, дату тоже час и минуту а секунда из этого набора маскимальна вот он и тянет за ней цену.

к примеру

машина 15.05.2012 13столбец часа 27 мин столбец 58секунд 5000 рублей <<<< так вот если последния покупка была 58 секунду и больше ее не было он другое не покажет!!!!

если бы было бы 35 секунд в которую совершилась то он бы и ее показал


что вернет MySQL вот в этом варианте:
SELECT lost.namea
, lost.datad
, hour(lost.timed) AS timedH
, minute(lost.timed) AS timedM
, max(second (lost.timed)) AS timedS
, min(second (lost.timed)) AS timedS2
, lost.priced 
FROM lost
GROUP BY
namea
, datad
, timedH
, timedM
15 май 12, 15:29    [12557517]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Ivan Durak
gares
а кукую еще он может вы водить если я хочу максимальную секунду имя обьединил, дату тоже час и минуту а секунда из этого набора маскимальна вот он и тянет за ней цену.

к примеру

машина 15.05.2012 13столбец часа 27 мин столбец 58секунд 5000 рублей <<<< так вот если последния покупка была 58 секунду и больше ее не было он другое не покажет!!!!

если бы было бы 35 секунд в которую совершилась то он бы и ее показал


что вернет MySQL вот в этом варианте:
SELECT lost.namea
, lost.datad
, hour(lost.timed) AS timedH
, minute(lost.timed) AS timedM
, max(second (lost.timed)) AS timedS
, min(second (lost.timed)) AS timedS2
, lost.priced 
FROM lost
GROUP BY
namea
, datad
, timedH
, timedM

тоже самое
15 май 12, 16:19    [12558089]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
gares
тоже самое

Что тоже самое??
15 май 12, 16:23    [12558131]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
такой же результат как и у меня с моим запросом
15 май 12, 16:26    [12558161]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
gares
такой же результат как и у меня с моим запросом

MySQL создал искуственный интеллект уровня не хуже человеческого!! Такой же
страшный и непредсказуемый
15 май 12, 17:05    [12558529]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
коль все такие умные тогда в чем причина всего разумного :)
15 май 12, 17:15    [12558601]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
SELECT dbo.lost.namea
, dbo.lost.datad
, DATEPART (hour, lost.timed) AS timedH
, DATEPART (minute, lost.timed) AS timedM
, Max(DATEPART (second, lost.timed)) AS timedS
, priced = ( 
    select top 1
        x.priced
    from dbo.lost x 
    where 
        a.namea = x.namea 
        and a.datad = x.datad 
        and DATEPART (hour, a.[lost.timed)] = DATEPART (hour, x.[lost.timed)] 
        and DATEPART (minute, a.[lost.timed]) = DATEPART (minute, a.[lost.timed]) 
    order by x.[lost.timed] desc
)
FROM
dbo.lost a
GROUP BY
namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed) 


Правда, сие будет, мягко говоря, не быстро.


не правильно выдает значение цены
15 май 12, 18:25    [12559079]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатная функция  [new]
gares
Member

Откуда:
Сообщений: 22
Select dbo.lost.namea
     , dbo.lost.datad
     , DATEPART (hour, lost.timed) AS timedH
     , DATEPART (minute, lost.timed) AS timedM
     , Max(DATEPART (second, lost.timed)) AS timedS 
from dbo.lost
GROUP BY
  namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed)

UNION

Select lost.priced
from dbo.lost
where dbo.lost.Namea = dbo.lost.Namea
 and dbo.lost.datad = dbo.lost.datad
 and DATEPART (hour, lost.timed) = DATEPART (hour, lost.timed)
 and DATEPART (minute, lost.timed) = DATEPART (minute, lost.timed)
 and DATEPART (second, lost.timed) = ( SELECT top 1 Max(DATEPART (second, lost.timed)) 
 
FROM dbo.lost
 where dbo.lost.Namea = dbo.lost.Namea
 and dbo.lost.datad = dbo.lost.datad
 and DATEPART (hour, lost.timed) = DATEPART (hour, lost.timed)
 and DATEPART (minute, lost.timed) = DATEPART (minute, lost.timed)
 GROUP BY
  namea
, datad
, DATEPART (hour, lost.timed)
, DATEPART (minute, lost.timed))


Почему то вторая часть где priced постоянно меняет количество значений
15 май 12, 20:45    [12559426]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить