Добрый день!
Подскажите как можно исключить из загрузки файл по дате?
Имеются файлы для анализа со следующими столбцами (Excel файлы)
Дата публикации, id, номер и тд.
Нужно при загрузки проверить Дату публикации и загрузить файл с последней датой.
https://yadi.sk/i/E5yopoOqhxrLx (https://yadi.sk/i/E5yopoOqhxrLx)
Добрый день.
Нужно применить вот такую выборку:
SELECT field_01, date FROM table a WHERE date=(SELECT max(date) FROM table b WHERE a.field_01 = b.field_01);
Спасибо за ответ!
Если можно помогите внедрить в мой код
export:
LOAD
//Основные данные
FileName() as [Файл контракта],
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
[contract/priceInfo/price] as [Цена контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации]
FROM [D:\ftp\Obrabotca\UnZIP\contract_*.xml] (XmlSimple, Table is [export]);
Есть возможность выложить "кусок" (20 строк) xml-файла, чтобы написал требуемую загрузку?
Да конечно.
https://yadi.sk/d/SZdhkjEAhySo6 (https://yadi.sk/d/SZdhkjEAhySo6)
Добрый день.
Поскольку все названия xml-файлов разные, то это вообще упрощается:
export:
LOAD
//Основные данные
FileName() as [Файл контракта],
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
[contract/priceInfo/price] as [Цена контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации]
FROM [\contract_*.xml] (XmlSimple, Table is [export]);
max_date:
LOAD max([Дата публикации]) as max_date
Resident export;
LET d1 = date(FieldValue('max_date', 1), 'DD.MM.YYYY');
export_max:
LOAD [Файл контракта] as ContractFile,
id,
[№ контракта],
[Номер реестровой записи контракта],
[Цена контракта],
[Ссылка на источник],
[Дата публикации]
Resident export
where [Дата публикации] = '$(d1)';
drop Table export;
Как-то так.
и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера, загрузить файл с последней датой публикации + загрузить все остальные файлы.
Исправил, предыдущий скрипт.
Цитата: PadijVD от 21 июля 2015, 11:58:29
и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера, загрузить файл с последней датой публикации + загрузить все остальные файлы.
Пока не нахожу решения, как это сделать в QlikView.
Можно загрузить все данные в БД и в БД уже можно написать нужный запрос:
SELECT field_01, date FROM table a WHERE date=(SELECT max(date) FROM table b WHERE a.field_01 = b.field_01);
Спасибо, буду тогда сам пытаться решить данный момент.
Держите в курсе решения, освобожусь - посмотрю.
Цитата: admin от 21 июля 2015, 12:40:06
Держите в курсе решения, освобожусь - посмотрю.
Хорошо! за любую помощь буду благодарен!
Казалось бы - простая задача. А, как ее НОРМАЛЬНО решить с помощью QlikView - пока не понятно.
PadijVD, попробуйте частичное решение:
export_101:
LOAD
//Основные данные
FileName() as [Файл контракта_01],
[contract/id] as id_01,
[contract/number] as [№ контракта_01],
[contract/regNum] as [Номер реестровой записи контракта_01],
[contract/priceInfo/price] as [Цена контракта_01],
[contract/href] as [Ссылка на источник_01],
Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации_01]
FROM [Temp\xml\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export_101 into export_101.qvd (qvd);
DROP Table export_101;
export_102:
Load distinct [Номер реестровой записи контракта_01] as [Номер реестровой записи контракта_02]
From [Temp\export_01.qvd] (qvd);
STORE * from export_102 into export_102.qvd (qvd);
DROP Table export_102;
export:
LOAD [Номер реестровой записи контракта_02] as [Номер реестровой записи контракта]
From [Temp\export_102.qvd] (qvd);
left join (export)
LOAD date(max([Дата публикации_01]), 'DD.MM.YYYY'),
[№ контракта_01] as [№ контракта],
[Номер реестровой записи контракта_01] as [Номер реестровой записи контракта],
[Цена контракта_01] as [Цена контракта],
[Ссылка на источник_01] as [Ссылка на источник]
From [Temp\export_101.qvd] (qvd)
Group By
[№ контракта_01],
[Номер реестровой записи контракта_01],
[Цена контракта_01],
[Ссылка на источник_01];
Цитата: kvv от 22 июля 2015, 03:55:37
Казалось бы - простая задача. А, как ее НОРМАЛЬНО решить с помощью QlikView - пока не понятно.
PadijVD, попробуйте частичное решение:
export_101:
LOAD
//Основные данные
FileName() as [Файл контракта_01],
[contract/id] as id_01,
[contract/number] as [№ контракта_01],
[contract/regNum] as [Номер реестровой записи контракта_01],
[contract/priceInfo/price] as [Цена контракта_01],
[contract/href] as [Ссылка на источник_01],
Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации_01]
FROM [Temp\xml\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export_101 into export_101.qvd (qvd);
DROP Table export_101;
export_102:
Load distinct [Номер реестровой записи контракта_01] as [Номер реестровой записи контракта_02]
From [Temp\export_01.qvd] (qvd);
STORE * from export_102 into export_102.qvd (qvd);
DROP Table export_102;
export:
LOAD [Номер реестровой записи контракта_02] as [Номер реестровой записи контракта]
From [Temp\export_102.qvd] (qvd);
left join (export)
LOAD date(max([Дата публикации_01]), 'DD.MM.YYYY'),
[№ контракта_01] as [№ контракта],
[Номер реестровой записи контракта_01] as [Номер реестровой записи контракта],
[Цена контракта_01] as [Цена контракта],
[Ссылка на источник_01] as [Ссылка на источник]
From [Temp\export_101.qvd] (qvd)
Group By
[№ контракта_01],
[Номер реестровой записи контракта_01],
[Цена контракта_01],
[Ссылка на источник_01];
Спасибо! Сегодня попробую загрузить данные с данным кодом.
Привет, если я правильно понял задачу то вот примерный код:
export:
LOAD
FileName() as [Файл контракта],
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
[contract/priceInfo/price] as [Цена контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации]
FROM [Контракты\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into export0.qvd (qvd);
DROP Table export;
tmp0:
Load *, Hash160([Номер реестровой записи контракта],[Дата публикации]) as IdRow from export0.qvd (qvd);
STORE * from tmp0 into export0.qvd (qvd);
tmp1:
load Hash160([Номер реестровой записи контракта],[МаксДата]) as IdRow;
LOAD max([Дата публикации]) as МаксДата,
[Номер реестровой записи контракта]
Resident tmp0
Group by [Номер реестровой записи контракта];
DROP Table tmp0;
Left join LOAD * from export0.qvd (qvd);
drop Field IdRow;
Но возникает вопрос, какую брать запись в том случае когда записи отличаются только по id? Как с
Номером реестровой записи контракта = 0151200007014000002 от 24/06/2015 .
Цитата: admin от 23 июля 2015, 02:28:12
Привет, если я правильно понял задачу то вот примерный код:
export:
LOAD
FileName() as [Файл контракта],
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
[contract/priceInfo/price] as [Цена контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации]
FROM [Контракты\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into export0.qvd (qvd);
DROP Table export;
tmp0:
Load *, Hash160([Номер реестровой записи контракта],[Дата публикации]) as IdRow from export0.qvd (qvd);
STORE * from tmp0 into export0.qvd (qvd);
tmp1:
load Hash160([Номер реестровой записи контракта],[МаксДата]) as IdRow;
LOAD max([Дата публикации]) as МаксДата,
[Номер реестровой записи контракта]
Resident tmp0
Group by [Номер реестровой записи контракта];
DROP Table tmp0;
Left join LOAD * from export0.qvd (qvd);
drop Field IdRow;
Но возникает вопрос, какую брать запись в том случае когда записи отличаются только по id? Как с
Номером реестровой записи контракта = 0151200007014000002 от 24/06/2015 .
Добрый день!
Номер id всегда уникален. А вот номер реестровой записи повторяется при внесение каких либо изменений в контракт. Соответственно нужно из нескольких записей с одинаковым реестровым номером взять данные с последней датой публикации.
Сейчас попробую данный код применить. Предыдущий код от KVV так и не смог приладить.
Обрати внимание на записи в снимке.
Все поля кроме ID и файла совпадают.
Цитата: admin от 23 июля 2015, 03:53:46
Обрати внимание на записи в снимке.
Все поля кроме ID и файла совпадают.
Спасибо Всем за помощь!!! Вроде все заработало как надо!
По поводу совпадения данных:
Изменения были в другой части файла, если необходим полный код для выборки всех данных, могу скинуть.
Цитата: PadijVD от 23 июля 2015, 04:05:36
По поводу совпадения данных:
Изменения были в другой части файла, если необходим полный код для выборки всех данных, могу скинуть.
Было бы интересно посмотреть.
Цитата: admin от 23 июля 2015, 06:24:30
Цитата: PadijVD от 23 июля 2015, 04:05:36
По поводу совпадения данных:
Изменения были в другой части файла, если необходим полный код для выборки всех данных, могу скинуть.
Было бы интересно посмотреть.
export:
LOAD
//Основные данные
FileName() as [Файл контракта],
[contract/foundation/oosOrder/order/notificationNumber] as [№ тендера],
[contract/products/product/sid] as sid,
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
replace([contract/priceInfo/price],'.',',') as [Стоимость контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации],
if([contract/finances/budgetFunds/budgetLevel]='11', 'Федеральный бюджет',
if([contract/finances/budgetFunds/budgetLevel]='12', 'Бюджет субъекта РФ',
if([contract/finances/budgetFunds/budgetLevel]='13', 'Местный бюджет',
[contract/finances/budgetFunds/budgetLevel]))) as [Источник бюджета],
//Заказчик
Capitalize([contract/customer/fullName]) as [З-Полное наименование],
[contract/customer/registrationDate] as [З-Дата регистрации],
[contract/customer/inn] as [З-ИНН],
[contract/customer/kpp] as [З-КПП],
[contract/customer/legalForm/singularName] as [Тип заказчика],
//Поставщик
lower (if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
'ИП',[contract/suppliers/supplier/legalEntityRF/legalForm/singularName])) as [Тип поставщика],
if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),'ИП '&
Capitalize( [contract/suppliers/supplier/individualPersonRF/lastName]&' '&
[contract/suppliers/supplier/individualPersonRF/firstName]&' '&
[contract/suppliers/supplier/individualPersonRF/middleName]),
Capitalize([contract/suppliers/supplier/legalEntityRF/fullName])) as [П-Полное наименование],
if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
[contract/suppliers/supplier/individualPersonRF/INN],
[contract/suppliers/supplier/legalEntityRF/INN]) as [П-ИНН],
if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
[contract/suppliers/supplier/individualPersonRF/address],
[contract/suppliers/supplier/legalEntityRF/address]) as [П-Адрес],
if([contract/suppliers/supplier/legalEntityRF/contactEMail]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactEMail]),
[contract/suppliers/supplier/individualPersonRF/contactEMail],
[contract/suppliers/supplier/legalEntityRF/contactEMail]) as [П-EMail],
if([contract/suppliers/supplier/legalEntityRF/contactPhone]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactPhone]),
[contract/suppliers/supplier/individualPersonRF/contactPhone],
[contract/suppliers/supplier/legalEntityRF/contactPhone]) as [П-Телефон],
if([contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]),
[contract/suppliers/supplier/individualPersonRF/lastName]&' '&
[contract/suppliers/supplier/individualPersonRF/firstName]&' '&
[contract/suppliers/supplier/individualPersonRF/middleName],
[contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]&' '&
[contract/suppliers/supplier/legalEntityRF/contactInfo/firstName]&' '&
[contract/suppliers/supplier/legalEntityRF/contactInfo/middleName]) as [П-ФИО],
if([contract/suppliers/supplier/legalEntityRF/OKTMO/name]='' or IsNull([contract/suppliers/supplier/legalEntityRF/OKTMO/name]),
[contract/suppliers/supplier/individualPersonRF/OKTMO/name],
[contract/suppliers/supplier/legalEntityRF/OKTMO/name]) as [OKTMO]
FROM [D:\ftp\Obrabotca\UnZIP\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into D:\Выгрузка\служебные файлы\Архив\export0.qvd (qvd);
DROP Table export;
tmp0:
Load *, Hash160([Номер реестровой записи контракта],[Дата публикации]) as IdRow from D:\Выгрузка\служебные файлы\Архив\export0.qvd (qvd);
STORE * from tmp0 into D:\Выгрузка\служебные файлы\Архив\export0.qvd (qvd);
tmp1:
load Hash160([Номер реестровой записи контракта],[МаксДата]) as IdRow;
LOAD max([Дата публикации]) as МаксДата,
[Номер реестровой записи контракта]
Resident tmp0
Group by [Номер реестровой записи контракта];
DROP Table tmp0;
Left join LOAD * from D:\Выгрузка\служебные файлы\Архив\export0.qvd (qvd);
drop Field IdRow;
Остался только вопрос как теперь сделать инкрементальную загрузку из всего этого, чтобы не перезагружать каждый раз все данные.
раньше это делалось с помощью вот такого кода:
////загружаем старые данные
//concatenate
//load
//*
//From D:\Выгрузка\служебные файлы\Архив\1.qvd (qvd);
//
////сохраняем новые + старые в один файл
//STORE export0 INTO D:\Выгрузка\служебные файлы\Архив\1.qvd (qvd);
Круто :)
С hash160 я конечно погорячился :), смысл в том, чтобы просто составной ключ создать.
Можно и hash128() либо просто склейку строк &.
А с инкрементальной загрузкой в чем проблема?
По сути ничего не изменилось.
Первоначальный файл как был так и остался, добавляется таблица с последними датами и все.