Я думаю, что вы ищете условную агрегацию. Вместо исключения записей в предложении WHERE
вы можете реализовать логику в агрегатных функциях. Поскольку вы не исключаете записи, у вас есть доступ ко всем данным, необходимым для выполнения всех вычислений.
Вот пример цены открытия и закрытия, основанный на ваших исходных запросах. Вы можете добавить столько столбцов, сколько необходимо с другими вычислениями.
SELECT
RefDate,
Symbol,
MAX(CASE WHEN SaleCondition LIKE '%O%' AND Pid='Q' THEN Price END) as OpeningPrice,
MAX(CASE WHEN SaleCondition LIKE '%6%' AND Pid='Q' THEN Price END) as ClosingPrice
FROM trds
GROUP BY
RefDate,
Symbol
Получите другую реализацию того же алгоритма PRNG, генерируйте небольшое количество длинноватых тестовых сценариев на основе известных семян и проверьте, что Ваша реализация алгоритма соответствует всем реализации else. Чем больше данных Вы тестируете, тем более случайный они делают. Если Вы хотите быть серьезными, изучить, как проверка FIPS сделана для алгоритма.
нет никакой потребности протестировать, случаен ли вывод, так как намного больше исследования было проведено на алгоритме других, чем Вы способны к репродуцированию.
при изобретении собственного алгоритма PRNG затем, у Вас есть довольно другая проблема, потому что вполне кроме тестирования Вашего кода также необходимо протестировать новый алгоритм. Существуют различные вещи сделать - я думаю, что самым важным является статистическое тестирование на выводе и экспертная оценка других шифровальщиков. В основном, тем не менее, если Вы были для разработки алгоритма PRNG, не имея достаточного знания в поле, чтобы знать, как протестировать его, затем это будет мусор.
Путь назад в школе, я разрабатывал генератор случайных чисел для присвоения моделирования и нуждался в некотором способе определить неслучайность.
я получил прекрасную идею взять два случайных числа и изобразить их в виде графика (x, y). Удивительно, как человеческий мозг может обнаружить неслучайные шаблоны. ("Случайный Шаблон" является оксюмороном.)
я настроил PRNG для удаления бороздчатости и starbursts, который появился на графике, затем построенном (журнал (x), журнал (y)) для совершенно новой перспективы, и повторил процесс.
Позже, я был вынужден взять статистику и узнал, что можно сделать странную математику для определения количества случайности.
Для тестирования PRNG я использовал бы ENT, который является комплектом статистических тестов, которые скажут Вам, как хорошо Ваш PRNG работает. Я предполагаю, что это - подход 1.
Я предположил бы, что в конечном счете Вы захотите оба теста - потому что Вы хотите быть уверенными, что оба следующее сохраняются:
(1) числа правильно распределяются и (2), определенный алгоритм работает как ожидалось.
, Возможно, первый тест мог только иногда запускаться, тогда как вторым могло быть использование, чтобы проверить, что любые изменения кода не повредили алгоритм.
"Случайность" в генераторе псевдослучайного числа обычно выражается как среднее количество повторений, прежде чем число повторится. Существуют многочисленные алгоритмы, которые имеют переменную "случайность" и производительность. Random.org имеет хорошее объяснение некоторого анализа, сделанного на их алгоритмах. Проверьте изображения примерно на полпути ниже на страницу. Легко видеть в статических изображениях, насколько случайный эти два алгоритма.
Одна функция PRNG (истинная функция, не ошибка, замаскированная как функция), - то, что это предсказуемо. Для данного семени должна быть произведена та же последовательность чисел. Это чрезвычайно важно и необходимо для тестирования и отладки программ, которые используют стохастический (иначе, случайный) методы.
последовательность числа должна приблизить определенное статистическое распределение. Протестируйте свой PRNG путем генерации большой последовательности (скажите 10^6 числа), и выполните несколько статистических тестов на последовательности, особенно тест В квадрате хи (если распределение нормально). Сделайте гистограмму из своего образца и посмотрите, похоже ли, что Вы ожидаете.
, Если Вы управляете, как семя установлено, сгенерированная последовательность должна быть тем же каждым разом, который подходит для того, чтобы сделать тестирование методом "белого ящика". При выполнении тестов это - также хорошая идея "нагреть" генератор путем выполнения его приблизительно для 100 повторений прежде, чем собрать образец.
Я полагаю, что Ваша первая точка (#1) добирается больше при тестировании качества сгенерированных случайных чисел, который диктует используемый алгоритм. Вторая точка (#2) добирается больше при тестировании реализация из алгоритма. При разработке алгоритма оба теста важны. При реализации алгоритма продемонстрированной производительности № 2 должен быть достаточным. Хотя, я, вероятно, протестировал бы больше, чем несколько семян и последовательности, которые закончились с помощью некоторого знания структуры конкретного генератора.
Вот статья CodeProject, которая включает реализацию теста Kolmogorov-Smirnov, упомянутого в объеме Donald Knuth 2, Получисловые Алгоритмы. Как упомянутый выше InSciTek Jeff, существует две проблемы: тестирование алгоритма и тестирование Вашей реализации алгоритма. Тест K-S, вероятно, найдет ошибки в реализации, и это - хорошее начало к тестированию качества самого алгоритма.
Plesae знать: Если Вы 'изобрели' свой PRNG, Вы будете, вероятно, иметь его неправильно и произвели что-то, что имеет меньше, чем оптимальное распределение. Базовый тест для того, насколько случайный Ваш генератор, является тестом Хи-квадрата
Можно найти некоторые ответы на этот вопрос полезный.
В основном, Вы не можете "доказать", что RNG случаен, но можно выполнить различные тесты для улучшения уверенности, что это. Эти тесты варьируются по сложности. Консерватор является всесторонним, но это действительно не предлагает ответ "да"/"нет", больше как несколько сотен "maybes". В другом конце спектра довольно просто генерировать последовательность значений (10,000, по крайней мере) и затем проверить, являются ли средние и стандартные deviaton/variance , как ожидается .
Строго, нет никакого способа протестировать, если случайный генератор действительно случаен :-) Первый подход дает Вам знание банки это keed надлежащее распределение или не для установленной суммы образцов только, неважно, насколько большой эта сумма. Второй подход может поддерживать knowlege, делает он ведет себя как алгоритм, но снова для фиксированного объема образцов.
лучшее можно сделать - используют обоих.
Если Вы не реализуете данный алгоритм PNRG нет никакого способа сказать, что числа случайны, это - природа случайности. да в среднем как Вы генератор чисел идет к бесконечности, которую он выровняет, но Вы не собираетесь тестировать бесконечное число повторений.
при реализации известного алгоритма проверьте, что первая несколько тысяч чисел соответствуют результатам, которые они обеспечивают данному ряду семян. нет никакого способа быть уверенным, хотя, поскольку количество возможных семян бесконечно.
Вы не можете даже доказать mathmatically, что последовательность чисел случайна...
Дилберт XKCD
кивается вниз...