Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 15 сообщений из 15, страница 1 из 1
28.04.2018, 10:18
    #39637890
ramel333
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Добрый день

Есть 2 таблицы

Name
| name_id | Name |

Payment
|payment_id | name_id | date | amount

Я хочу сделать выборку с максимальной датой платежа

select n.name, p.date
from
name n
inner join payment p on p.name_id=n.name_id and p.date in
(select max(date) from payment where name_id=n.name_id)

Можно ли как то более оптимально это записать - для такой простой вещи использовать вложенный запрос как то кажется неоптимальным.
...
Рейтинг: 0 / 0
28.04.2018, 10:24
    #39637893
Just_Serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
ramel333,

По опыту скажу EXISTS работает быстрее чем IN
...
Рейтинг: 0 / 0
28.04.2018, 10:31
    #39637899
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
ramel333,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select n.name, p.date
from
name n
cross apply 
(select max(date) as Max_Date from payment where name_id=n.name_id
Having max(date) = n.date
) p
...
Рейтинг: 0 / 0
28.04.2018, 10:32
    #39637900
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Kopelly,

Ошибочка:

Код: sql
1.
2.
3.
4.
5.
6.
7.
select n.*
from
name n
cross apply 
(select max(date) as Max_Date from payment where name_id=n.name_id
Having max(date) = n.date
) p
...
Рейтинг: 0 / 0
28.04.2018, 10:33
    #39637902
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Kopelly,
Опять ошибочка:

Код: sql
1.
2.
3.
4.
5.
6.
7.
select *
from
name n
cross apply 
(select max(date) as Max_Date from payment where name_id=n.name_id
Having max(date) = n.date
) p
...
Рейтинг: 0 / 0
28.04.2018, 11:25
    #39637935
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
rly?
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  n.[name],
  [max_date] = MAX( p.[date] )
FROM
  [name] n
  INNER JOIN [payment] p on (
        p.[name_id] = n.[name_id] )
...
Рейтинг: 0 / 0
28.04.2018, 11:26
    #39637936
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Код: sql
1.
2.
GROUP BY
  n.[name]
...
Рейтинг: 0 / 0
28.04.2018, 11:36
    #39637945
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
select *
from
name n
outer apply 
(select top 1 * from payment where name_id=n.name_id
Order by date desc
) p
...
Рейтинг: 0 / 0
28.04.2018, 11:38
    #39637946
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Kopelly , зачем Вы мучаетесь, пытаясь получить всю запись о платеже, когда автору, по его словам, нужна только последняя дата?
...
Рейтинг: 0 / 0
28.04.2018, 11:55
    #39637954
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
...
Рейтинг: 0 / 0
28.04.2018, 12:00
    #39637958
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Щукина Аннаramel333,
ну баян же... или неустаревающая классика ?
У него задача проще, и решается она простым MAX( ... ) GROUP BY
...
Рейтинг: 0 / 0
28.04.2018, 12:01
    #39637961
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Akina,

Хочу чтобы у студента в процессе выбора хоть что-то в голове осталось...
...
Рейтинг: 0 / 0
28.04.2018, 12:26
    #39637979
ramel333
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Уточню запрос, скорее нужна сумма за последнюю дату

select n.name, p.amount
from
name n
inner join payment p on p.name_id=n.name_id and p.date in
(select max(date) from payment where name_id=n.name_id)
...
Рейтинг: 0 / 0
28.04.2018, 12:28
    #39637982
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
ramel333Уточню запрос, скорее нужна сумма за последнюю дату
Вот и надо было задавать соответствующий вопрос.
Ответ уже дали 21376633 , а там аж целых 7+1 вариантов решения.
...
Рейтинг: 0 / 0
28.04.2018, 18:42
    #39638165
humble
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Хоть так хоть так без индекса сканирование будет.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]