Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 59 60 61 62 63 [64] 65 66 67 68 .. 106   вперед  Ctrl
 Re: CACHE и MSSQL  [new]
ЛП
Guest
2 Валерий Долженко (aka iscrafm)

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

  • Хоть это и находится в разделе "Рекомендуется", но с Вами это единственно приемлимый стиль общения, ибо из Ваших вопросов редко бывает понятна постановка задачи, и на протяжении топика Вы уже продемонстрировали своё умение на лету менять условие задачи и делать вид, что имели в виду совсем не то.

    Хотите чтобы Вам список построили? Не вопрос, приводите структуру входных данных, тестовые данные, то, что хотите получить на выходе.
    Хотите средневзвешенную цену? Не вопрос, приводите структуру входных данных, тестовые данные, то, что хотите получить на выходе.

    А иначе в ответ на "посчитайте мне средневзвешенную цену" так и будете получать "Select средневзвешенная_цена From откуда_то Where что_то". С Вами по другому не получается.
    6 дек 06, 11:47    [3497746]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Валерий Долженко (aka iscrafm)
    softwarer
    Впрочем, не вижу проблемы. Нормальное средневзвешенное спокойно считается обычными агрегатными функциями. Является ли средневзвешенная цена нормальной - не знаю, думаю, что является.

    можно пример?

    http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5_%D0%B2%D0%B7%D0%B2%D0%B5%D1%88%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5

    Мне кажется, приведенной информации вполне достаточно, чтобы понять, как считать среднее взвешенное с помощью агрегатной функции SUM.
    6 дек 06, 11:58    [3497893]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    softwarer, и ЛП тоже
    не надо торопиться с выводами, я тоже в своё время удивился что эта на первый взгляд простая задача не решается с помощью агрегатной функции SUM.

    Суть задачи. Есть товар, который в разное время покупается и продаётся за разную цену. При первой покупке средневзвешенная цена (СВЦ) считается ценой покупки. При последующих покупках СВЦ считается как
    ([кол-во товара до текущей покупки]*[СВЦ до текущей покупки]+[кол-во покупаемого товара]*[цена покупки])/([кол-во товара до текущей покупки]+[кол-во покупаемого товара])
    При продажах цена не меняется, меняется только количество оставшегося товара.

    Пример(когда минус - продажа):
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126
    22 20 8
    3-108
    42168

    Если допустим продажа была бы раньше, цена была бы другой
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126
    2-106
    32 20 8.33
    42168.2

    Так вот посчитать одним запросом все СВЦ для всех дат сразу не получится - продажи всё портят, надо обязательно пройти всё по порядку и последовательно расчитать.
    Хотя может используя рекурсивные запросы и можно, попробуйте
    6 дек 06, 13:15    [3498671]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    Gluk (Kazan)
    Member

    Откуда:
    Сообщений: 9365
    SergSuper

    Так вот посчитать одним запросом все СВЦ для всех дат сразу не получится - продажи всё портят, надо обязательно пройти всё по порядку и последовательно расчитать.


    Гы таки АНАЛИТИКА окно от начал группы до текущей записи, сортировка по дате продажи
    скууууушна
    6 дек 06, 13:29    [3498830]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    SergSuper
    не надо торопиться с выводами, я тоже в своё время удивился что эта на первый взгляд простая задача не решается с помощью агрегатной функции SUM.

    Так, как Вы ее описали, решается. Если убрать словесные усложнения, получается тривиальщина: самое обычное средневзвешенное по купленному и еще не проданному товару.

    Как именно считать - зависит от структуры хранения. В частности, как совершенно справедливо заметил Глюк, при приведенной Вами структуре удобно использовать аналитические функции.

    SergSuper
    Хотя может используя рекурсивные запросы и можно, попробуйте

    Зачем рекурсивные запросы?
    6 дек 06, 13:58    [3499182]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    ну так и что теперь мешает продемонстрировать, раз всё так просто?
    6 дек 06, 14:00    [3499210]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    _nicht_schissen_
    Guest
    Задача для стандартного SQL
    Дано:
    таблица версий
    create table T (VerID int identity primary key, VerDateTime datetime, ID int, F1 int, F2 varchar, F3 datetime, F4 decimal)
    Необходимо:
    сформировать таблицу изменений записи от версии к версии - фактически версионный batch.
    Что-то в виде:
    01.01.2006 00:00 [F1=1 -> F1=3]
    02.01.2006 12:00 [F1=3 -> F1=6] [F2='x' -> F2='y']
    02.01.2006 15:00 [F3='01.01.2006' -> F3='12.01.2006'] [F2='x' -> F2='y']
    6 дек 06, 14:21    [3499380]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    SergSuper
    ну так и что теперь мешает продемонстрировать, раз всё так просто?

    SergSuper, мешает лень. А прежде чем хамить, будьте добры хотя бы не делать ошибок в приведенных данных; честное слово, мне смешно думать, что можно тратить время, пытаясь подогнаться под приведенные Вами ошибочные числа.

    P.S. Если Вы докажете верность Ваших расчетов, я безусловно извинюсь. Но я уверен, что Вы ошиблись в том, что по Вашим словам отлично считаете.
    6 дек 06, 14:38    [3499553]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    _nicht_schissen_
    Задача для стандартного SQL

    Кстати, спасибо за мысль. Пожалуй, дам эту задачку, когда в следующий раз буду подбирать программиста.
    6 дек 06, 14:51    [3499648]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    Павел Воронцов
    Member

    Откуда: Новосибирск
    Сообщений: 2400
    Блог
    softwarer
    SergSuper
    ну так и что теперь мешает продемонстрировать, раз всё так просто?

    SergSuper, мешает лень. А прежде чем хамить, будьте добры хотя бы не делать ошибок в приведенных данных; честное слово, мне смешно думать, что можно тратить время, пытаясь подогнаться под приведенные Вами ошибочные числа.

    P.S. Если Вы докажете верность Ваших расчетов, я безусловно извинюсь. Но я уверен, что Вы ошиблись в том, что по Вашим словам отлично считаете.
    Вам не хамили. В данных ошибки нет. Здесь действительно похоже без рекурсии не обойтись. Но я ещё подумаю...
    6 дек 06, 15:03    [3499720]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Павел Воронцов
    Вам не хамили.

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

    Павел Воронцов
    В данных ошибки нет.

    Хм. Я всю жизнь считал, что 26/3 никак не даст .(3) в результате. Видимо, то ли ошибался, то ли используется не десятичная система.
    6 дек 06, 15:07    [3499759]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    Павел Воронцов
    Member

    Откуда: Новосибирск
    Сообщений: 2400
    Блог
    softwarer
    Павел, если одна сторона все время показывает код, другая сторона отделывается словами типа "а вот все равно есть другие задачи, которые", а теперь еще и подтягивается участник, который начинает сходу выдвигать претензии, я не считаю это наиболее удачной линией поведения.
    Вы путаете участников форума друг с другом
    softwarer
    Хм. Я всю жизнь считал, что 26/3 никак не даст .(3) в результате. Видимо, то ли ошибался, то ли используется не десятичная система.
    С 8.33 действительно что-то неясно, но всё равно аналитика тут не поможет. Перечитайте внимательней условие.
    6 дек 06, 15:17    [3499852]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    MX -- ALEX
    Guest
    SergSuper
    softwarer, и ЛП тоже
    не надо торопиться с выводами, я тоже в своё время удивился что эта на первый взгляд простая задача не решается с помощью агрегатной функции SUM.

    Суть задачи. Есть товар, который в разное время покупается и продаётся за разную цену. При первой покупке средневзвешенная цена (СВЦ) считается ценой покупки. При последующих покупках СВЦ считается как
    ([кол-во товара до текущей покупки]*[СВЦ до текущей покупки]+[кол-во покупаемого товара]*[цена покупки])/([кол-во товара до текущей покупки]+[кол-во покупаемого товара])
    При продажах цена не меняется, меняется только количество оставшегося товара.

    Пример(когда минус - продажа):
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126
    22 20 8
    3-108
    42168

    Если допустим продажа была бы раньше, цена была бы другой
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126
    2-106
    32 20 8.33
    42168.2

    Так вот посчитать одним запросом все СВЦ для всех дат сразу не получится - продажи всё портят, надо обязательно пройти всё по порядку и последовательно расчитать.
    Хотя может используя рекурсивные запросы и можно, попробуйте


    так никто и не смог решить эту задачку.

    вот приедет Леонидыч с командировки - он ужо вас ...
    6 дек 06, 15:23    [3499899]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    Ошибка всё-таки была(и не одна), правильно так
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126 = 6
    22 10 8 = (6*2+10*2)/4
    3-108 = 8 (продажа; осталось 3)
    42168 = (3*8+2*16)/5


    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126 = 6
    2-106 (продажа; осталось 1)
    32 10 8.33 = (1*6+2*10)/3
    4288.4 = (8.33*3+2*8)/5

    не понимаю почему только такая ... странная реакция.
    хотели постановку задачи, где нельзя решить одним запросом - пожалуйста
    если чего-то непонятно или неправильно - можно же переспросить, а в ответ - "да всё равно фигня, и смотреть нечего"
    не ожидал как-то

    Сообщение было отредактировано: 6 дек 06, 15:28
    6 дек 06, 15:27    [3499945]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    SergSuper
    8 = (3*8+2*16)/5
    8.33 = (1*6+2*10)/3

    Серг, я понимаю, что Вы не видите невозможности написанного, но хотя бы черт возьми пользуйтесь калькулятором.
    6 дек 06, 15:35    [3500027]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    iscrafm
    Member [заблокирован]

    Откуда:
    Сообщений: 35345
    ЛП
    2 Валерий Долженко (aka iscrafm)
    Почитайте правила форумаС Вами по другому не получается.

    читайте топики внимательно
    6 дек 06, 15:41    [3500097]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Павел Воронцов
    С 8.33 действительно что-то неясно, но всё равно аналитика тут не поможет. Перечитайте внимательней условие.

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

    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126 = 6
    22 10 8 = (6*2+10*2)/4


    первой строке 12 полагается ценой партии, делится на 2 и получается 6, во второй строке 10 полагается уже ценой единицы и множится на 2.

    Прежде чем говорить о дальнейшем, задам вопрос: согласны ли Вы с моим пониманием названной величины как самое обычное средневзвешенное по купленному и еще не проданному товару. Здесь только еще важна методика списания; я подозреваю [хотя могу и ошибаться] что изложенный алгоритм несколько варьируется в зависимости от методики учета на предприятии.
    6 дек 06, 15:46    [3500147]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    Павел Воронцов
    Member

    Откуда: Новосибирск
    Сообщений: 2400
    Блог
    softwarer
    Условие к сожалению запутано, в том числе путаницей между "ценой единицы товара" и "ценой партии товара" - если обратите внимание, в последнем примере вычислений Серг сам в них запутался. ....

    Прежде чем говорить о дальнейшем, задам вопрос: согласны ли Вы с моим пониманием названной величины как самое обычное средневзвешенное по купленному и еще не проданному товару. Здесь только еще важна методика списания; я подозреваю [хотя могу и ошибаться] что изложенный алгоритм несколько варьируется в зависимости от методики учета на предприятии.
    Главное - это вот это:

    При последующих покупках СВЦ считается как
    ([кол-во товара до текущей покупки]*[СВЦ до текущей покупки]+[цена покупки])/([кол-во товара до текущей покупки]+[кол-во покупаемого товара])
    При продажах цена не меняется, меняется только количество оставшегося товара.


    (я немного поправил формулировку, стараясь убрать действительно имеющуюся путаницу). Фишка в том, что [СВЦ до текущей покупки] можно вычислить лишь рекурсивно. Я не вижу как это можно сделать через аналитические функции. Это, к сожалению, не самое обычное средне-взвешенное по купленному, но ещё не проданному. Напишите запрос и увидите, даже, возможно, на этих самых данных.
    6 дек 06, 15:57    [3500269]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    iscrafm
    Member [заблокирован]

    Откуда:
    Сообщений: 35345
    softwarer
    Мне кажется, приведенной информации вполне достаточно, чтобы понять, как считать среднее взвешенное с помощью агрегатной функции SUM.

    Для справки:
    себестоимость по средневзвешенным ценам вычисляется по следующей формуле
    (стоимость начального остатка + стоимость прихода)/(количество начального остатка + количество прихода) = себестоимость единицы. Себестоимость реализованной продукции = Себестоимость единицы * количество реализованной продукции.
    Стоимость конечного остатка = Стоимость начального остатка + стоимость прихода - стоимость реализованной продукции. И так для каждого периода.
    При чем здесь агрегатные функции, тяжело конечно понять... хотя да, в алгоритмах они используются.
    6 дек 06, 16:00    [3500298]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    MX -- ALEX
    Guest
    iscrafm
    softwarer
    Мне кажется, приведенной информации вполне достаточно, чтобы понять, как считать среднее взвешенное с помощью агрегатной функции SUM.

    Для справки:
    себестоимость по средневзвешенным ценам вычисляется по следующей формуле
    (стоимость начального остатка + стоимость прихода)/(количество начального остатка + количество прихода) = себестоимость единицы. Себестоимость реализованной продукции = Себестоимость единицы * количество реализованной продукции.
    Стоимость конечного остатка = Стоимость начального остатка + стоимость прихода - стоимость реализованной продукции. И так для каждого периода.
    При чем здесь агрегатные функции, тяжело конечно понять... хотя да, в алгоритмах они используются.


    вероятно здесь термин "себестоимость" это -
    расчетная средневзвешеная закупочная цена ?

    т как себестоимость включает и растоможку и транспорт и потери и хранение и ....
    6 дек 06, 16:09    [3500379]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    Блин, позор та какой
    Последняя(надеюсь верная) редакция
    (на калькуляторе проверил:)
    денькол-во покупки/продажи цена покупки СВЦ
    1 2 126 = 6
    22 10 8 = (6*2+10*2)/4
    3-108 = 8 (продажа; осталось 3)
    4288 = (3*8+2*8)/5


    денькол-во покупки/продажи цена покупки СВЦ
    1 2 66 = 6
    2-106 (продажа; осталось 1)
    32 10 8.66 = (1*6+2*10)/3
    4288.4 = (8.66*3+2*8)/5

    Называется это по-моему средневзвешенная цена покупки. Я столкнулся с этим при расчетах с ценными бумагами

    Павел Воронцов, а формулировку Вы исказили, надо тогда использовать стоимость покупки, а
    не цену

    iscrafm, извините я Ваши простыни удалил
    больно много букв, разбираться врядли кто будет, а от тему отвлекает

    Сообщение было отредактировано: 6 дек 06, 16:21
    6 дек 06, 16:16    [3500453]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    iscrafm
    Member [заблокирован]

    Откуда:
    Сообщений: 35345
    MX -- ALEX
    вероятно здесь термин "себестоимость" это -
    расчетная средневзвешеная закупочная цена ?
    т как себестоимость включает и растоможку и транспорт и потери и хранение и ....

    да, конечно. Нам еще алгоритмов распределения накладных расходов здесь не хватало :)
    6 дек 06, 16:17    [3500460]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    iscrafm
    Member [заблокирован]

    Откуда:
    Сообщений: 35345
    SergSuper

    iscrafm, извините я Ваши простыни удалил
    больно много букв, разбираться врядли кто будет, а от тему отвлекает

    ну да ладно, я не в обиде. Хотя было бы полезным посмотреть на то, как работают алгоритмы. А то ведь опять потребуют постановку :)
    6 дек 06, 16:25    [3500541]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67463
    Блог
    Павел Воронцов
    Фишка в том, что [СВЦ до текущей покупки] можно вычислить лишь рекурсивно. Я не вижу как это можно сделать через аналитические функции.

    Ok, понял, о чем Вы. Согласен, забыл, что LAG не умеет ссылаться сам на себя. Тогда не буду думать на тему аналитики, поскольку есть другое очевидное решение:

    SQL> with
      2    your_data as ( select 1 day, 2 qnt, 12 cost from dual union all
      3                   select 2, 2,	20 from dual union all
      4                   select 3, -1, 0 from dual union all
      5                   select 4, 2, 16 from dual
      6                   order by 1 )
      7  select
      8    day, qnt, cost, cur_m_price
      9  from
     10    your_data
     11    model
     12    dimension by ( day )
     13    measures ( qnt, cost, 0 price, 0 cur_qnt, 0 cur_m_price )
     14    rules upsert sequential order (
     15      price [ any ] = cost [cv()] / qnt [cv()],
     16      cur_qnt [ any ] = sum ( qnt ) over ( order by day ),
     17      cur_m_price [ any ] = case
     18                                when qnt [cv()] < 0 then cur_m_price [cv()-1]
     19                                else ( coalesce ( cur_m_price[cv()-1] * cur_qnt [cv()-1], 0 ) + qnt [cv()] * price [cv()]) / cur_qnt [cv()]
     20                              end
     21    ) ;
    
           DAY        QNT       COST CUR_M_PRICE
    ---------- ---------- ---------- -----------
             1          2         12           6
             2          2         20           8
             3         -1          0           8
             4          2         16           8
    
    SQL> with
      2    your_data as ( select 1 day, 2 qnt, 12 cost from dual union all
      3                   select 3, 2,	20 from dual union all
      4                   select 2, -1, 0 from dual union all
      5                   select 4, 2, 16 from dual
      6                   order by 1 )
      7  select
      8    day, qnt, cost, cur_m_price
      9  from
     10    your_data
     11    model
     12    dimension by ( day )
     13    measures ( qnt, cost, 0 price, 0 cur_qnt, 0 cur_m_price )
     14    rules upsert sequential order (
     15      price [ any ] = cost [cv()] / qnt [cv()],
     16      cur_qnt [ any ] = sum ( qnt ) over ( order by day ),
     17      cur_m_price [ any ] = case
     18                                when qnt [cv()] < 0 then cur_m_price [cv()-1]
     19                                else ( coalesce ( cur_m_price[cv()-1] * cur_qnt [cv()-1], 0 ) + qnt [cv()] * price [cv()]) / cur_qnt [cv()]
     20                              end
     21    ) ;
    
           DAY        QNT       COST CUR_M_PRICE
    ---------- ---------- ---------- -----------
             1          2         12           6
             2         -1          0           6
             3          2         20 8,666666666
             4          2         16         8,4
    6 дек 06, 16:35    [3500647]     Ответить | Цитировать Сообщить модератору
     Re: CACHE и MSSQL  [new]
    Павел Воронцов
    Member

    Откуда: Новосибирск
    Сообщений: 2400
    Блог
    Позор на мои седины.. Пойду читать TFM по 10ке...
    6 дек 06, 16:41    [3500699]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 .. 59 60 61 62 63 [64] 65 66 67 68 .. 106   вперед  Ctrl
    Все форумы / Сравнение СУБД Ответить