Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.202.198.173] |
|
Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Смотрите. У меня есть 3 таблицы состоящие из полей
DocumentDate: Date Amount: integer Таблицы просто назовем table1 table2 table3 Представим что в первой и второй таблице по миллиону записей, а в третей нет записей вобще! Задача такова: Нужно вытащить из них только 3 последнии даты! И к ним поля Amount Тоесть допустим table1.DocumentDate = 23.03.2014 table1.DocumentDate = 23.01.2014 table1.DocumentDate = 23.01.2013 table2.DocumentDate = 23.02.2014 Значит в ответе должны взять 23.03.2014 23.02.2014 23.01.2014 Вот как такое реализовать? Тоесть сравним все таблицы, и найдем только 3 существующие последние даты в них |
Сообщ.
#2
,
|
|
|
SELECT TOP 3 aaa.DocumentDate FROM (SELECT DocumentDate FROM Table1 UNION ALL SELECT DocumentDate FROM Table2 ) AS aaa ORDER By aaa.DocumentDate DESC |
Сообщ.
#3
,
|
|
|
SELECT TOP 3 aaa.DocumentDate, aaa.Amount FROM (SELECT DocumentDate, Amount FROM Table1 UNION ALL SELECT DocumentDate, aaa.Amount FROM Table2 ) AS aaa ORDER By aaa.DocumentDate DESC |
Сообщ.
#4
,
|
|
|
АААА, вон оно как...
Тоесть и максимальное находить не надо значение..... Спасибо, сделаю так, посмотрю как на практике... Отпишусь Добавлено MIF огромное спасибо! |
Сообщ.
#5
,
|
|
|
Возникла трудность!
Вот я составил запрос SELECT TOP 3 CommonTable.DocumentDate, CommonTable.Amount, Customer.NameFull FROM ( SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocRu WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocSalary WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocPens WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocSoc WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocTax WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, Amount, CustId, UserKey FROM ViewMBSCPayDocCur WHERE PayerAccount = :Account UNION ALL SELECT DocumentDate, AmountDebet as Amount, CustId, UserKey FROM ViewMBSCCurrConversion WHERE AccountDebet = :Account UNION ALL SELECT DocumentDate, AmountDebet as Amount, CustId, UserKey FROM ViewMBSCCurrBuy WHERE AccountDebet = :Account UNION ALL SELECT DocumentDate, AmountDebet as Amount, CustId , UserKey FROM ViewMBSCCurrSell WHERE AccountDebet = :Account ) AS CommonTable, Customer WHERE Customer.CustId = CommonTable.CustId AND CommonTable.UserKey = :UserKey ORDER By CommonTable.DocumentDate DESC Он отлично работает в SyBase. Но вобщем у нас в системе используются предкомпилированные SQL.... Тоесть это SQL который отработает на любой СУБД! И вот он ругается на TOP 3, и на то что в FROM нельзя использовать такую структуру.... Можно ли как то изменить его но что бы был тот же результат и работал во всех СУБД? |
Сообщ.
#6
,
|
|
|
Цитата treeS @ у нас в системе используются ... он ругается Ну так приведите в соответствие синтаксис! |
Сообщ.
#7
,
|
|
|
как? Я не знаю как
|
Сообщ.
#8
,
|
|
|
У каждой СУБД свои закидоны в части синтаксиса. Либор корректируйте для конкретной СУБД, либо переписывайте с использованием только конструкций, котрые понимает любая из возможных СУБД. Т.е. определите, какой из стандартов поддерживается всеми вашими СУБД, и пилите в рамках этого стандарта.
|
Сообщ.
#9
,
|
|
|
ВОТ!!! Это я и спрашиваю как переписать для всех?
Но к меня возникла идея с View таблицей Добавлено Все, получилось сделать с View таблицей,Создал View таблицу с И использовал ее, так работает |
Сообщ.
#10
,
|
|
|
Сначала определите перечень используемых СУБД - включая версии. Потом - общий для них стандарт. Только после этого можно будет думать, что надо менять и что можно использовать.
А декларации - штука бессмысленная. Добавлено Кстати, а почему у Вас одна сущность - документ о двитжении денежных средств - размазана по десятку таблиц? |
Сообщ.
#11
,
|
|
|
1. У нас система принимает только предкомпелированные SQL через ODBC драйвер. И все, это не обойти ( Но спасибо я уже использовал View таблицу, они универсальны для всех )
Цитата Кстати, а почему у Вас одна сущность - документ о двитжении денежных средств - размазана по десятку таблиц? Ну так было задумано в головном офисе в Москве. Я могу только брать от туда значения. Изменять я ничего не имею право. |
Сообщ.
#12
,
|
|
|
Цитата treeS @ У нас система принимает только предкомпелированные SQL через ODBC драйвер. Значит, смотрите описание на драйвер. Ну чё как дети-то... |
Сообщ.
#13
,
|
|
|
Akina Вас не смущает то что я уже сделал?)))))
|
Сообщ.
#14
,
|
|
|
Не-а... решение проблем методом научного тыка - это просто откладывание их "на потом". Например
Цитата treeS @ я уже использовал View таблицу, они универсальны для всех это проверено по документации, или просто "вроде не сбоячит"? |
Сообщ.
#15
,
|
|
|
Цитата Akina @ Не-а... решение проблем методом научного тыка - это просто откладывание их "на потом". Например Цитата treeS @ я уже использовал View таблицу, они универсальны для всех это проверено по документации, или просто "вроде не сбоячит"? Проверено 16 летним опытом работы этой системы |