powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по MS Query
13 сообщений из 13, страница 1 из 1
Вопрос по MS Query
    #33416643
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подозреваю что вопрос элементарный, но что-то не могу сообразить.
Надо сделать отчет в XL путем получения данных из MS SQL через query.
В БД есть поле - содержит дату действия (и соответсвенно остатка, если говорить про фин. показатели) по счету.
Надо что бы в отчет вытягивались данные за последнюю дату изменения по счету.
Грубо говоря

счет дата изменения остаток
1 01/01/2005 -2
1 31/01/2005 58
1 01/06/2005 20
1 31/10/2005 11
1 01/11/2005 5

Мне нужно что бы в отчет попадали данные только за 01/11/2005

Как сделать?
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416780
И в чем проблема?

Данные -> внешние данные -> создать запрос. И в окне MS Query указываешь условие.

Либо так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    With ActiveSheet.QueryTables.Add(Connection:= _
      "ODBC;DSN=База данных MS Access;" _
      & "DBQ=D:\1\db1.mdb;" _
      & "DefaultDir=D:\1;" _
      & "DriverId=25;FIL=MS Access;MaxBufferSize=2048;" _
      & "PageTimeout=5;UID=admin;", Destination:=Range("G10"))
        .CommandType = xlCmdSql
        .CommandText = "SELECT счет, [дата изменения], остаток " _
          & "FROM НазваниеТаблицы " _
          & "WHERE [дата изменения] = #11/1/2005#"
        .Refresh BackgroundQuery:=False
    End With
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416797
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем так.
Если бы я знал ТОЧНУЮ дату на какую было изменение по счету - безусловно условие выбора по дате было бы супер.
НО. Есть куча счетов. Для каждого счета есть куча изменений на разные даты.
При чем для одного счета дата последнего изменения может быть текущей, а для другого - недельной давности.
Вопрос как выбрать дату _последнего_ изменения счета. (сооствеетственно последнее изменение может быть хоть год назад).
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416810
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо в MS Query подредактировать текст запроса. По всем полям , кроме даты, должна быть группировка, а перед названием поля даты- слово Max. Это будет выборка за посдеднюю дату. Кроме Max , есть другие варианты. Если так не умеешь , используй фильтр в сводной таблице.
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416837
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
5631Надо в MS Query подредактировать текст запроса. По всем полям , кроме даты, должна быть группировка, а перед названием поля даты- слово Max. Это будет выборка за посдеднюю дату. Кроме Max , есть другие варианты. Если так не умеешь , используй фильтр в сводной таблице.

В XL не могу данные вытащить просто из-за того, что их больше 65000 строк. Он их стянуть не может.

А вот про первый вариант с запросом - чуть подробнее можно. я с Query столкнулся несоколько дней назад, это не моя работа, это скорее факультатив. ;)
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416897
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом ты , вообще, вытягиваешь данные с сервера?
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33416939
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через Query.
Создаю там запрос. Выбираю нужные групировки.
Получился вот такой сиквел-запрос.


SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Date_Carry, RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))

Соответственно поле, где храниться информация по дате проводок
RestDate.Date_Carry

Вот из него необходимо выбирать максимальное значение.
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33417035
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой панель инструментов , которая отвечает за работу с внешними данными, перейди в MS Query , нажми на кнопку SQL. Найди там на панели кнопку с операциями(кажется сумма), нажми на нее. Потом вручную исправь текст запроса.
SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Date_Carry, RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))

После Where...AND ((Account.Open_Close<>'З')) у тебя должно быть Group By
c перечислением всех выводимых полей(Group by Account.Open_Close,Account.Account,...) . Поле даты туда вносить не надо.
В предложении Select напиши Max(это поле) as это поле вместо названия поля
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33417091
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я тебя правильно понял, то у меня должен получиться такой запрос:

SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, Max(RestDate.Date_Carry) AS 'RestDate.Date_Carry', RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))
GROUP BY Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Rest


Сделал. Выборку все равно дает со всеми счетами и всеми данными.
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33417129
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для уменьшения объёма данных убрал несколько лишних столбцов.
Запрос нынче такой.

SELECT Account.Open_Close, Account.Account, Account.Balance, Account.Name_Account, Max(RestDate.Date_Carry) AS 'RestDate.Date_Carry', RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))
GROUP BY Account.Open_Close, Account.Account, Account.Balance, Account.Name_Account, RestDate.Rest


Все равно выбирает по несколько одинаковых счетов с остатками на разные даты.
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33417164
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так

1) вариант, если счетов много, то можно и сервак надолго подвесить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
	Account.Open_Close, 
	Account.Account, 
	Account.Code_Currency, 
	Account.Client, 
	Account.Balance, 
	Account.Oper, 
	Account.Name_Account, 
	Account.Close_Date, 
	(SELECT TOP  1  RestDate.Rest FROM RestDate WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance ORDER BY RestDate.Date_Carry) AS [Rest]
FROM 
	RSBank.dbo.Account Account
WHERE 
	(Account.Open_Close<>'З')

2) выриант посложгнее, но должен выполнятся быстрее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SELECT 
	Account.Open_Close, 
	Account.Account, 
	Account.Code_Currency, 
	Account.Client, 
	Account.Balance, 
	Account.Oper, 
	Account.Name_Account, 
	Account.Close_Date, 
	RI.Rest AS [Rest]
FROM 
	RSBank.dbo.Account Account
INNER JOIN (
	SELECT 
		RestDate,Account,
		RestSate.Balance,
		RestDate.Rest 
	FROM 
		Rest 
	INNER JOIN (
		SELECT 
			MAX(R.Date_Carry) AS MaxDate 
		FROM 
			RestDate R 
		GROUP BY 
			R.Account, R.Balance) ON R.Account = RestDate.Account AND R.Balance = RestDate.Balance AND R.MaxDate = RestDate.Date_Carry
	) RI ON RI.Account = Account.Account AND RI.Balance = Account.Balance
WHERE 
	(Account.Open_Close<>'З')
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33417337
Gunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь! Сейчас буду обкатывать!
...
Рейтинг: 0 / 0
Вопрос по MS Query
    #33418046
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gunn, маленький встречный вопрос.
Как вы из РС-Банк в сиквел данные закачиваете ?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по MS Query
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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