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

Откуда:
Сообщений: 733
Парни, привет,
Помогите с одним запросом, че-то мозг не включается ...
есть 2 таблицы из которых нужно сформировать запрос по следующему принципу:
В первой таблице есть 2 поля:
Inventory:
Inventory.ID_Branch - int
Inventory.InvDate - Datetime
подразделений много и в разное время по ним проводилась инвентаризация...
и таблица Storage:

id_branch - int
Data - datetime
Qnty - numeric(12,2)

как мне передать во второй подзапрос lastInvent таким образом
чтобы в подзапрос попали все транзакции начиная с максимальной даты из первой таблицы...

select inv.*, s.* FROM
(
select a.id_branch , max(a.InvDate) as lastInvent from Inventory a Group by a.id_branch
) inv
Left join (select id_branch , sum(qnty) as totQnty from storage where data>= LastDate) s
ON inv.id_branch = s.id_branch
всем спасибо заранее ...
26 сен 17, 10:32    [20822789]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii
Парни, привет,
Помогите с одним запросом, че-то мозг не включается ...
есть 2 таблицы из которых нужно сформировать запрос по следующему принципу:
В первой таблице есть 2 поля:
Inventory:
Inventory.ID_Branch - int
Inventory.InvDate - Datetime
подразделений много и в разное время по ним проводилась инвентаризация...
и таблица Storage:

id_branch - int
Data - datetime
Qnty - numeric(12,2)

как мне передать во второй подзапрос lastInvent таким образом
чтобы в подзапрос попали все транзакции начиная с максимальной даты из первой таблицы...

select inv.*, s.* FROM
(
select a.id_branch , max(a.InvDate) as lastInvent from Inventory a Group by a.id_branch
) inv
Left join (select id_branch , sum(qnty) as totQnty from storage where data>= LastDate) s
ON inv.id_branch = s.id_branch
всем спасибо заранее ...


Забыл.... SQL 2000!!!!!
26 сен 17, 10:32    [20822797]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
SELECT *
FROM ( SELECT ID_Branch, MAX(InvDate ) MaxDate
       FROM Inventory
     ) subquery1,
     Storage
WHERE subquery1.ID_Branch = Storage.ID_Branch
  AND Storage.Data >= subquery1.MaxDate

?
26 сен 17, 11:32    [20823179]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Akina,

пробуем....
26 сен 17, 11:36    [20823198]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Akina,

скорее всего не пройдет так как если не было движений в storage останутся только те по которым были а это неверно ..
Нужен LEFT JOIN
26 сен 17, 11:38    [20823211]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Akina,

без GROUP BY ID_Branch работает?
26 сен 17, 11:39    [20823218]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
Valerii, ну добавь, делов-то...
26 сен 17, 11:45    [20823248]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
iap, нет, конечно. Но так это ж только идея, соответственно писано на коленке.
26 сен 17, 11:46    [20823254]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Akina
SELECT *
FROM ( SELECT ID_Branch, MAX(InvDate ) MaxDate
       FROM Inventory
     ) subquery1,
     Storage
WHERE subquery1.ID_Branch = Storage.ID_Branch
  AND Storage.Data >= subquery1.MaxDate

?


SELECT *
FROM ( SELECT ID_Branch, MAX(InvDate ) MaxDate
FROM Inventory
) subquery1,
LEFT JOIN (SELECT id_branch, sum(qnty) AS totQnty FROM Storage where data>=inventory.MaxDate Group by id_branch ) Store
ON inventory.ID_Branch = Store.ID_Branch
что-то типа этого ....
26 сен 17, 11:49    [20823264]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
iap,

нет, не работает
26 сен 17, 12:09    [20823337]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
SELECT *
FROM ( SELECT ID_Branch, MAX(InvDate ) MaxDate
       FROM Inventory
       GROUP BY ID_Branch /* было упущено, спасибо iap */
     ) subquery1 /* , */ 
LEFT JOIN
     Storage
/* WHERE */ ON subquery1.ID_Branch = Storage.ID_Branch
  AND Storage.Data >= subquery1.MaxDate
26 сен 17, 12:19    [20823370]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii
iap,

нет, не работает


еще раз попробую объяснить....
мне нужно из 2-х таблиц вычислить набор данных таким образом чтоб из первой таблицы появились все подразделения с последней датой инвентаризации - то есть
id_branch и invDate

это я делаю просто..
select id_branch, max(invDate) as maxDate from inventory group by id_branch

Id_branch InvDate
3 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000
4 2017-09-11 07:00:00.000

теперь мне нужно сделать выборку из другой таблицы storage просуммировав только те количества дата которых больше или равна
invDate из первой выборки:
то есть эти 2 подзапроса нужно как-то склеить чтобы во второй подзапрос попадали суммирования только по условию data>=inventory.maxDate

Не знаю как передать MaxDate во воторой подзапрос чтобы было примерно вот так:
select a.*,b.* from
(select id_branch, max(invDate) as maxDate from inventory group by id_branch) a
Left Join (select id_branch, sum(qnty) from storage Where data>=a.maxDate)
ON a.id_branch = b.id_branch
WHERE не подходит так как при отстутствии транзакции по данному подразделению, это подразделение выпадет из 1-го подзапроса.

Может логика изначально неверна ... может есть другие методы как решить такие задачи. Еще раз MS SQL 2000!!!!
26 сен 17, 12:27    [20823404]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
select
 a.id_branch. a.maxDate, sum(b.qty)
from
 (select id_branch, max(invDate) as maxDate from inventory group by id_branch) a
 Left Join storage b on b.id_branch = a.id_branch and b.data >= a.maxDate
group by
 a.id_branch. a.maxDate;
26 сен 17, 13:05    [20823590]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
invm
select
 a.id_branch. a.maxDate, sum(b.qty)
from
 (select id_branch, max(invDate) as maxDate from inventory group by id_branch) a
 Left Join storage b on b.id_branch = a.id_branch and b.data >= a.maxDate
group by
 a.id_branch. a.maxDate;


похоже на правду...
ок.. спс... сейчас глянем.. правда я уже сделал по-другому.... через ж-у.. тяжелый по плану но понятный для меня..
26 сен 17, 13:36    [20823692]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Valerii
Member

Откуда:
Сообщений: 733
Valerii
invm
select
 a.id_branch. a.maxDate, sum(b.qty)
from
 (select id_branch, max(invDate) as maxDate from inventory group by id_branch) a
 Left Join storage b on b.id_branch = a.id_branch and b.data >= a.maxDate
group by
 a.id_branch. a.maxDate;


похоже на правду...
ок.. спс... сейчас глянем.. правда я уже сделал по-другому.... через ж-у.. тяжелый по плану но понятный для меня..


да - оно!! спасибо!!!
кода меньше результат тот же...
26 сен 17, 14:11    [20823864]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить