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

Откуда:
Сообщений: 9
Есть задача:Дана таблица1 нужно получить таблица2
Таблица1
ФИО Дата Сумма
Царев 29.10.2013 100
Царев 04.03.2013 40
Царев 01.07.2012 15
Царев 05.12.2013 500
Морозов 17.01.2013 100
Морозов 14.08.2013 40
Зайцев 09.11.2012 12
Ушаков 08.09.2013 100
Ушаков 04.04.2013 60
Ушаков 03.09.2013 70

Таблица2
ФИО Дата Сумма
Ушаков 04.04.2013 60
Морозов 14.08.2013 40
Царев 04.03.2013 40
Ушаков 03.09.2013 70
Царев 29.10.2013 100
Зайцев 09.11.2012 12
Морозов 17.01.2013 100

Нашел законномерность ,что кол-во одинаковых ФИО максимально 2 и думаю сумма <=100
Так вот пишу запрос:
SELECT ФИО, ДАТА , СУММА
FROM таблица1
WHERE сумма >=100 AND какое условие задать ,что б максимум 2 ФИО одинаковых было?
или вообще по другому запрос построить надо? Помогите люди добрые :)
20 ноя 13, 23:09    [15165136]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
sdet
Member

Откуда:
Сообщений: 463
happy29,
Разберитесь с условием задачи, как получается таблица 2.
20 ноя 13, 23:52    [15165304]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
happy29
Member

Откуда:
Сообщений: 9
sdet,в том то и проблема - мне дана начальная таблица(таблица1)и результирующая таблица(таблица2).Надо написать наиболее простой запрос ,который из начальной получит результирующую.Вот я и никак не разберусь толком какие тут условия задавали в запросе,что б получить таблица2
21 ноя 13, 00:07    [15165391]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
sdet
Member

Откуда:
Сообщений: 463
happy29
sdet,в том то и проблема - мне дана начальная таблица(таблица1)и результирующая таблица(таблица2).Надо написать наиболее простой запрос ,который из начальной получит результирующую.Вот я и никак не разберусь толком какие тут условия задавали в запросе,что б получить таблица2

Условия задаются на основании требований. Уточняйте требования в своей организации.
21 ноя 13, 00:22    [15165447]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
happy29
Member

Откуда:
Сообщений: 9
sdet, проблема в том ,что это тест на собеседовании,мне даны тока 2 эти таблицы,исходная и результирующая и мне самому надо проследить законномерность в результирующей по отношению к исходной и написать запрос ,что б получить из исходной рез-ю
21 ноя 13, 00:31    [15165472]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
happy29
что это тест на собеседовании,мне даны тока 2 эти таблицы,исходная и результирующая и мне самому надо проследить законномерность в результирующей по отношению к исходной и написать запрос ,что б получить из исходной рез-ю

Зарплату потом тоже на всех участвовавщих в решении будем делить ?
21 ноя 13, 01:04    [15165532]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
happy29
Member

Откуда:
Сообщений: 9
Эх началось))я ж не прошу за меня все сделать,я прошу совета в том или не том направлении копаю,sql тока начал изучать
21 ноя 13, 01:09    [15165543]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
sdet
Member

Откуда:
Сообщений: 463
happy29
Эх началось))я ж не прошу за меня все сделать,я прошу совета в том или не том направлении копаю,sql тока начал изучать

Для поиска закономерностей не требуется знание sql. Описанные вами закономерности не дают однозначного решения для формирования таблицы2.
21 ноя 13, 01:19    [15165561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
happy29
Нашел законномерность ,что кол-во одинаковых ФИО максимально 2 и думаю сумма <=100

Тогда почему не попал Царев с суммой 15 и Ушаков с суммой 100?
21 ноя 13, 01:21    [15165565]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
Возможно условие такое:
Условие
Выбрать все записи, у которых сумма по полю "Сумма" в пределах одного ФИО будет лежать от 130 до 140 включительно. Либо, если в пределах группы по ФИО условие не выполняется, то взять из этой группы одну запись, например с мин/макс суммой, или мин/макс датой, или ещё по какому-то критерию (товарищ Зайцев).
21 ноя 13, 01:34    [15165593]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
happy29
Member

Откуда:
Сообщений: 9
ROLpogo,поэтому и написал,что думаю,а не уверен,я опечатался с датой у царева 15 одинаковая дата с морозовым14.08.2013 ,считаю поэтому он и отпадает,если задать distinct,а вот Ушаков и портит все ,из за этого в ступоре
21 ноя 13, 01:43    [15165611]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Вот такой запрос даёт нужную комбинацию.

; WITH AV as (SELECT AVG(Amount) av_Amnt, Name FROM table GROUP BY Name),
  Res as ( SELECT t.*, dense_rank() over(partition by t.name order by ABS(a.av_Amnt - t.Amount)) rnk
    FROM table as t INNER JOIN AV as a ON a.Name = t.Name)
SELECT Name, NDate, Amount FROM Res 
WHERE  rnk <= 2;


Уверен что это не единственное решение.
21 ноя 13, 01:55    [15165633]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Вот ещё, даже проще
; WITH Res as (SELECT t.*, dense_rank() over(partition by t.name order by ABS(DATEDIFF(dd, NDate, '2013-06-01'))) rnk FROM table as t  )
SELECT Name, NDate, Amount FROM Res WHERE  rnk <= 2;
21 ноя 13, 02:04    [15165651]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
o-o
Guest
я думаю, не стоит останавливаться на достигнутом.
для начала можно посчитать число гласных в фамилии, возвести в куб, прибавить DATEPART(DW, Дата),
перевести полученное в двоичную систему и побитово сложить с колонкой "сумма".
глядишь, еще какая закономерность нарисуется.
21 ноя 13, 02:58    [15165716]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
o-o
я думаю, не стоит останавливаться на достигнутом.
для начала можно посчитать число гласных в фамилии, возвести в куб, прибавить DATEPART(DW, Дата),
перевести полученное в двоичную систему и побитово сложить с колонкой "сумма".
глядишь, еще какая закономерность нарисуется.
Я думал в сторону хэша, так было-бы ещё загадочнее
21 ноя 13, 03:01    [15165723]     Ответить | Цитировать Сообщить модератору
 Re: Помогите начинающему с SQL запросом  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
happy29
проследить законномерность в результирующей по отношению к исходной и

ИМХО, выбрать из исходной
1) первую дату (и сумму) по человеку
2) последнюю дату (и сумму) по человеку

т.к. Зайцев один раз, то значит в выборку (2) не должны попадать записи из (1). Или наоборот (если отсортированы правильно) в (1) не должно идти (2)
21 ноя 13, 09:22    [15166145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить