|
Задачка на запросы для разминки мозгов | ☑ | ||
---|---|---|---|---|
0
Sewace
20.02.14
✎
16:53
|
Навеяно темой "JOB: Насколько вопрос сложен для соискателя?" про "СрезПредПредПоследних".
Не первый раз попадается такая задачка. Хочу ее предложить тут в качестве разминки для мозга. Итак, предположим есть временная таблица "ТЗ" (это чтобы не привязываться к объектам конфигурации) со следующими полями: - "ДатаСобытия" (Дата, без времени); - "Контрагент"; - "Событие". Пример заполнения: 01.02.2014, Иванов, Звонок 02.02.2014, Иванов, Встреча 04.02.2014, Петров, Звонок. Требуется получить таблицу уникальных контрагентов с указанием последних даты события и самого события. Колонки: "Контрагент", "ПоследняяДата", "ПоследнееСобытие". Для приведенного примера результат должен быть таким: Иванов, 02.02.2014, Встреча Петров, 04.02.2014, Звонок. Сразу хочу оговориться, что трудность возникает в том случае, если за один день у данного контрагента будет несколько событий. В этом случае надо вывести ЛЮБОЕ из этих событий (нет способа определить из таблицы какое было раньше или позже). Вот. Вот такое задание можно дать на собеседовании. Если кому-то интересно, то можно пораскинуть мозгами и выкладывать тут примеры запросов. |
|||
1
ДенисЧ
20.02.14
✎
16:56
|
Скучно. Тупая задача.
|
|||
2
МойКодУныл
20.02.14
✎
16:57
|
Первая выборка с группировкой по контрагенту дата МАКСИМУМ (на событие не смотрим)
соединяем с полной таблицей левым соединением по дате и контаргенту, потом полученное группируем по Контаргенту, дате - Событие Максимум. |
|||
3
PR
20.02.14
✎
17:01
|
(0) 10 задача из http://odinesnik.ru/task.txt
|
|||
4
fisher
20.02.14
✎
17:43
|
Проще сразу спросить - "читали ли вы статью на мисте про срез последних на каждую дату в запросе?"
|
|||
5
Фатих Ридванов
20.02.14
✎
17:53
|
(0) Вот пример запроса.
ВЫБРАТЬ МАКСИМУМ(СобытиеТЗ.Дата) КАК Дата, СобытиеТЗ.Контрагент ПОМЕСТИТЬ ТЗ ИЗ Документ.Событие.ТЗ КАК СобытиеТЗ СГРУППИРОВАТЬ ПО СобытиеТЗ.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СобытиеТЗ.Контрагент, СобытиеТЗ.Дата, МАКСИМУМ(СобытиеТЗ.События) КАК События ИЗ Документ.Событие.ТЗ КАК СобытиеТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ ПО СобытиеТЗ.Контрагент= ТЗ.Контрагент И СобытиеТЗ.Дата = ТЗ.Дата СГРУППИРОВАТЬ ПО СобытиеТЗ.Контрагент, СобытиеТЗ.Дата |
|||
6
Feunoir
20.02.14
✎
18:01
|
(0) А вот в FoxPro можно было использовать агрегатные функции в SQL запросе без обязательной группировки по остальным полям. Вот там была веселуха. Правда это было двадцать лет назад и подробностей я уже не припомню. Но для меня был шок, когда я узнал, что например Interbase (да и вообще любая адекватная СУБД), такого не позволяет.
|
|||
7
Torquader
20.02.14
✎
22:06
|
(6) В семёрке тоже можно функцию в запросе попытаться использовать, но скорость исполнения говорит, что не нужно.
|
|||
8
МихаилМ
21.02.14
✎
01:17
|
(7)
ms sql profiler и filemon . "говортят" почему. |
|||
9
МишельЛагранж
21.02.14
✎
01:31
|
(0)Сразу хочу оговориться, что трудность возникает в том случае
трудность возникает в каком угодно случае: - строки задвоены - будут указаны не все данные - данные не верны - ... |
|||
10
МишельЛагранж
21.02.14
✎
02:39
|
(0) пора организовывать на мисте клуб по интересам "Стажеры обмениваются опытом".
Сплошь темы оттуда пошли. |
|||
11
Torquader
21.02.14
✎
15:14
|
Так и запишем "клуб молодых дятлов".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |