Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Вниз

2000 задачка   Найти похожие ветки 

 
KAA   (2002-05-16 16:23) [0]

Есть таблица с полями: номер комнаты, дата поселения.
1. Требуется для каждой записи в таблице добавить максимальную дату поселения в комнату с таким же номером, но среди дат меньших даты послеления в этой записи.
2. Для каждой записи в этой таблице добавить дату поселения в этот же номер, наиболее близкую по значению дате поселения в этой записи.


 
Johnmen   (2002-05-16 16:51) [1]

Что-то неясно, зачем еще одно поле ?


 
KAA   (2002-05-16 17:31) [2]

>Johnmen © (16.05.02 16:51)
Сама задача другая, она намного больше и там в частности надо проделать подобного рода операцию. Я постарался попроще ее сформулировать. :)
Вообщем требуется добавить третье поле по тем правилам.


 
Johnmen   (2002-05-16 17:38) [3]

Можно, конечно, попытаться через триггеры или сделать анализ с коррекцией из приложения, но все это очень гиморно, поскольку отслеживать эти поля в динамике - полный ....
:)


 
KAA   (2002-05-16 18:07) [4]

Я и так и эдак, запросом сделать не получается. Если бы в подзапрос передать дату из записи как параметр как-то, тогда наверное получилось бы.


 
Reindeer Moss Eater   (2002-05-16 18:20) [5]

Если бы в подзапрос передать дату из записи как параметр

Так это обычный связанный подзапрос, который поддерживается стандартом


 
KAA   (2002-05-17 11:00) [6]

Мне кажется, что по идее сработает подобный запрос.
Таблица T1: поля Num (int), DT (datetime)

SELECT T1.Num, T1.DT, T2.MD
FROM T1 LEFT OUTER JOIN
(SELECT max(DT) AS MD FROM T1 WHERE {DT<текущего DT из первой части запроса}
GRPUP BY Num) AS T2 ON T1.Num=T2.Num

Вот только как сделать это условие в фигурных скобках?


 
Lusha   (2002-05-17 11:11) [7]

>KAA © (17.05.02 11:00)
А слабо просто предоставить элементарные примерчики данных и требуемого результата запроса? Ей Богу, уже давно бы решение получил... Или, по крайней мере, причины объясняющие почему это нельзя реализовать... :)


 
KAA   (2002-05-17 12:24) [8]

>Lusha © (17.05.02 11:11)
Можно попробовать.
Есть таблица размещений, в кторой заданы промежутки времени, в которых человеку разрешено проживать в какой либо комнате (номер комнаты, фио, дата поселения, дата выселения). Есть вторая таблица выдачи ключей, где хранится номер комнаты, фио, момент выдачи ключа, момент возвращения ключа.
Задача. Каждой записи из таблицы выдачи ключей поставить в соответствие наиболее подходящую запись из таблицы размещения. Т.е. с таким же номером комнаты, с таким же ФИО и с наиболее близко подходящими датами. Промежутки времени могут не совпадать в разные стороны. Т.е. своего рода интеллектуальный подбор.
В связи с определенными особенностями базы, напрямую их связать нельзя.


 
Lusha   (2002-05-17 12:58) [9]

>KAA © (17.05.02 12:24)
Млин, КАА, я просил данные... Циферки, буковки, а не краткое описание структуры БД да, еще и на русском... Просто таблички с примерным содержимым таблиц T1 и T2 и результатом запроса для этих (приведенных) данных... Поверьте, нет ничего, более информативного...


 
Donal_Graeme   (2002-05-17 14:12) [10]

1.
UPDATE MyTable T1
Set PrevDate=(Select Max (Date) From MyTable T2 Where T1.RoomNo = T2.RoomNo and T2.Date < T1.Date)

2.
UPDATE MyTable T1
Set CloseDate=(Select Date From MyTable T2 Where T1.RoomNo = T2.RoomNo and (T2.Date -T1.Date) = (Select Min (T3.Date -T1.Date) From MyTable T3 Where T1.RoomNo = T3.RoomNo and T1.Date <> T3.Date))

ничего не проверял.
PrevDate - дата предыдущего поселения
CloseDate - ближайшая дата поселения



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
7-31032
Oks
2002-03-14 15:42
2002.06.10
Определение метки компакт диска


1-30819
Kaldr
2002-05-31 11:46
2002.06.10
Исключ. ситуац.


1-30871
Fissher
2002-05-29 17:04
2002.06.10
Чтение из ini - файла


1-30874
Dishar
2002-05-28 23:20
2002.06.10
PageControl и TabSheet...


1-30816
Rom-k
2002-05-31 14:29
2002.06.10
ASCII-codes





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский