Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Совсем запутался, помогите отобрать данные Добавлено: 03.11.04 09:56  

Автор вопроса:  Hunter2003 | ICQ: 287314254 

Dim recSet As String
Dim varKey As String ' ключ
Dim varName As String ' наименование
Dim varSch As Boolean ' признак
Dim dateVvod As Date ' дата ввода изменений
recSet = “SELECT key, name, date, sch FROM table ORDER BY key”
‘ где key – ключ (String)
‘ name – название (String)
‘ date – дата ввода изменений (Date)
‘ sch – признак (Boolean)
Adodc1.ConnectionString = "Provider=VFPOLEDB.1;Data Source=" & _
    frmMain.dbPath & ";Mode=ReadWrite;Password="""";Collating Sequence" _
    & "=MACHINE"
Adodc1.RecordSource = recSet
Adodc1.CommandType = adCmdText
Adodc1.Refresh


Нужно в существующем наборе найти записи по каждому key, где date имеет наибольшее значение и sch = True, если по данному key, с максимальным значением date sch = False, то такую запись пропускаем. Всё это сделать нужно в цикле, в котором при выполнении условия присваиваем значения переменным varKey, VarName, dateVvod, varSch.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #1
Добавлено: 04.11.04 17:02
А если такой select:
SELECT key, name, max(date), sch
FROM table
WHERE sch = true
GROUP BY key, name, sch
ORDER BY key

Ответить

Номер ответа: 2
Автор ответа:
 Hunter2003



ICQ: 287314254 

Вопросов: 14
Ответов: 72
 Профиль | | #2 Добавлено: 10.11.04 08:23
С помощью запроса такое не выберешь! Тут нужно программно! Например table содержит слудующее:

key name date sch
1 1111111 01.01.2000 False
1 1111111 01.01.2001 True
1 1111111 01.01.2003 True
2 2222222 01.01.1999 True
2 2222222 01.05.2002 False
2 2222222 01.01.2004 True
3 3333333 01.01.2002 False
3 3333333 01.01.2003 True
3 3333333 01.01.2004 False

Нужно, чтобы прога выбрала следующее:

key name data sch
1 1111111 01.01.2001 True
2 2222222 01.01.2004 True

Ответить

Номер ответа: 3
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #3
Добавлено: 10.11.04 08:44
Я не понял условия выборки.
По какому принципу получилась выборка?

Ответить

Номер ответа: 4
Автор ответа:
 Hunter2003



ICQ: 287314254 

Вопросов: 14
Ответов: 72
 Профиль | | #4 Добавлено: 10.11.04 11:18
Выпорка должна происходить следующим образом:

По key=1
Смотрим в таблицу и видим что две последние записи имеют sch=True, значит из них выбираем ту, которая с минимальным значением date.

По key=2
Тут всё просто, выбираем последнюю, т.к. sch=True и date имеет максимальное значение.

По key=3
Находим запись с нинимальным значение date и sch=True, и если есть запись с большим значением date и sch=False, то эта запись никуда не должна отбираться.

P.S. таблица table представляет собой архив изменений (абонентов, пользователей и т.п.), где полем date определяются последние и действующие изменения по которым будут производиться какие-либо действия. Поле sch отределяет наличие кокого нибудь прибора. Цель задачи сводиться к нахождению абонентов, пользователей и т.п. у которых установлен данный прибор. Но эти пользователи или абоненты могум произвольно как устанавливать прибор, так и снимать его на техническое обслуживание.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам