0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
1 | |
Как получить все записи с максимальным значением одного из полей?05.07.2009, 11:11. Показов 2818. Ответов 25
Метки нет (Все метки)
Имеется , условно говоря, база документов со всеми их атрибутами. В базе могут находиться одинаковые документы, различающиеся только номером версии. Как составить запрос, чтобы выдавались все документы с максимальным значением номера версии ? База на Акссесс 97.
0
|
05.07.2009, 11:11 | |
Ответы с готовыми решениями:
25
Получить новую последовательность, выбросив из исходной все члены с максимальным значением Получить новую последовательность, выбрав из исходной все члены с максимальным значением Массивы: получить новый массив, выбросив из исходной все члены с максимальным значением Получить из исходного массива новый массив, исключив из него все элементы с максимальным значением |
0 / 0 / 0
Регистрация: 25.03.2009
Сообщений: 70
|
|
05.07.2009, 14:09 | 2 |
'SELECT MAX (Номер_документа) FROM Имя_бд WHERE имя_документа=имя_документа_которое_нужно'
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
05.07.2009, 14:21 [ТС] | 3 |
Tory
В том то и дело, что имя_документа_которое_нужно это все документы в базе. Нужно отсеять документы у которых имеются более поздние версии.
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
05.07.2009, 15:18 [ТС] | 4 |
Вот пример:
Есть: Doc1 Ver1 Doc1 Ver2 Doc2 Ver1 Doc3 Ver1 Doc3 Ver2 Doc3 Ver3 Результатом запроса должно стать: Doc1 Ver2 Doc2 Ver1 Doc3 Ver3
0
|
Axel
|
|
05.07.2009, 23:44 | 5 |
http://relib.com/forums/topic.asp?id=777500
|
Axel
|
|
05.07.2009, 23:53 | 6 |
http://relib.com/forums/topic.asp?id=777166
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
07.09.2009, 15:15 [ТС] | 7 |
А что за оператор такой 'in' ? Чего-то описания я нигде не нашел. А запрос с ним то работает то нет.
Собственно запрос у меня вот какой: sql_select = 'select * from knowbase where 1 = 1 ' & DocID1 & DocID2 & Date1 & Date2 & Otdel & FIO & DocumentAlias & PartInsur & Tema & Ext & Forma1 & Actual & Approved & ' and FamCount in ' & '(' & 'Select Max(FamCount) from knowbase GROUP BY DocumentAlias , PartInsur, Forma1, Tema' & ') order by ID' И нужно чтобы выбирался только максимальный этот FamCount из документов с одинаковым DocumentAlias, PartInsur, Forma1, Tema
0
|
Axel
|
|
07.09.2009, 22:46 | 8 |
where ID in (1,2,3,4)
выбирает все записи, у которых поле ID в значение 1,2,3,4... и т.д. ты напиши что у тебя в итоге получается.. в запросе.. без всяких там переменных |
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
08.09.2009, 13:04 [ТС] | 9 |
Ну результирующий запрос зависит от значений переменных.
Но может выглядеть например вот так: select * from knowbase where 1 = 1 and PartInsur = 'Банковское' and Forma1 = 'Аддендум' and FamCount in (Select Max(FamCount) from knowbase GROUP BY DocumentAlias , PartInsur, Forma1, Tema) order by ID
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
17.12.2009, 15:43 [ТС] | 10 |
Ээх, неужели нельзя такой запрос составить?
Задача на мне с той поры так и весит, и периодически о ней вспоминают.
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
17.12.2009, 15:44 [ТС] | 11 |
опечатался, задача 'висит' конечно.
0
|
0 / 0 / 0
Регистрация: 23.10.2008
Сообщений: 27
|
|
18.12.2009, 19:32 | 12 |
SELECT Doc, Max(Ver) FROM YourTable GROUP BY Doc
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
20.12.2009, 10:54 [ТС] | 13 |
Пробую в данную схему засунуть свой конкретный запрос:
SELECT (Select * from knowbase where 1=1 and PartInsur = 'Банковское' and Forma1 = 'Аддендум'), Max(FamCount) FROM knowbase GROUP BY (Select * from knowbase where 1=1and PartInsur = 'Банковское' and Forma1 = 'Аддендум' ); Пишет Syntax error
0
|
0 / 0 / 0
Регистрация: 23.10.2008
Сообщений: 27
|
|
20.12.2009, 12:07 | 14 |
Правильно пишет. Попробуйте так.
SELECT Doc, Max(Ver) FROM YourTable WHERE PartInsur = 'Банковское' and Forma1 = 'Аддендум' GROUP BY Doc
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
20.12.2009, 12:11 [ТС] | 15 |
'Doc' у меня формируется динамически, и 'WHERE PartInsur = 'Банковское' and Forma1 = 'Аддендум'' это один из возможных вариантов 'Doc'
0
|
0 / 0 / 0
Регистрация: 23.10.2008
Сообщений: 27
|
|
20.12.2009, 12:38 | 16 |
SELECT Doc, Max(Ver) FROM YourTable
WHERE Doc IN (SELECT Doc FROM YourTable WHERE PartInsur 'Банковское' and Forma1 = 'Аддендум') GROUP BY Doc
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
20.12.2009, 12:41 [ТС] | 17 |
Doc - это такой оператор языка SQl ?
0
|
0 / 0 / 0
Регистрация: 23.10.2008
Сообщений: 27
|
|
20.12.2009, 12:57 | 18 |
Это имя поля из Вашего примера, в котором содержится номер документа. Значения поля - Doc1, Doc2 и т.д.
0
|
0 / 0 / 0
Регистрация: 10.02.2009
Сообщений: 23
|
|
20.12.2009, 13:05 [ТС] | 19 |
Ну это я пример такой упрощенный привел.
На самом деле то что в примере Doc, у меня выглядит как: where 1 = 1 ' & DocID1 & DocID2 & Date1 & Date2 & Otdel & FIO & DocumentAlias & PartInsur & Tema & Ext & Forma1 & Actual & Approved и в зависимости от пользовательского запроса с подставнокой переменных может выглядеть как: where 1 = 1 and PartInsur = 'Банковское' and Forma1 = 'Аддендум' или еще как-то. И нужно чтоб из всех этих документов выбирались только с максимальным номером версии.
0
|
0 / 0 / 0
Регистрация: 23.10.2008
Сообщений: 27
|
|
20.12.2009, 13:57 | 20 |
Вам необходимо создать поле в таблице, однозначно определяющее документ, например, Doc. При этом первичным ключем таблицы может быть комбинация полей Doc и Version. Тогда не придется писать запросы такого рода
SELECT First(Txt) AS Txt1, First(Num) AS Num1, First(Dt) AS Dt1, Max(Ver) AS MaxVer FROM YourTable WHERE (((Txt+CStr(Num)+CStr(Dt)) In (SELECT Txt+CStr(Num)+CStr(Dt) FROM YourTable WHERE Txt = 'Doc3' AND Num=3 AND Dt=#10/13/2003 10:49:03#))) GROUP BY (Txt+CStr(Num)+CStr(Dt)); где Txt, Num, Dt - атрибуты искомого документа, имющие тип текст, число и дата/время соответственно.
0
|
20.12.2009, 13:57 | |
20.12.2009, 13:57 | |
Помогаю со студенческими работами здесь
20
Есть таблица. Как напечатать N копий записи из неё?. N - значение одного из полей записи. Как получить элемент списка с максимальным значением свойства? Как выбрать запись и все значения её полей по максимальному значению одного из полей? Найти среднее арифметическое между максимальным значением матрицы и максимальным значением массива Извлечение записи с максимальным значением Вывод записи с максимальным значением Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |