![]() |
|
Как в запросе определить минимум разностей дат? | ☑ | ||
---|---|---|---|---|
0
Prog111
26.05.17
✎
11:21
|
Есть такая функция, в ней из периодического регистра сведений получаю записи. Мне нужна та запись, которая ближе всего находится к переданному параметру &Время (то есть разность может быть положительной и отрицательной, и нужна разность, где минимальный модуль у разности дат. Подскажите, как это реализовать, пока на самом начале запроса сижу)
Функция ПолучитьСостояниеВизита(Пациент, Время, СостояниеВизита) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РАЗНОСТЬДАТ(ПосещенияПациентов.Период, &Время, СЕКУНДА) КАК Поле1, | ПосещенияПациентов.Пациент, | ПосещенияПациентов.СостояниеВизита |ИЗ | РегистрСведений.ПосещенияПациентов КАК ПосещенияПациентов |ГДЕ | ПосещенияПациентов.Период >= &НачалоПериода | И ПосещенияПациентов.Период <= &КонецПериода | И ПосещенияПациентов.Пациент = &Пациент | И ПосещенияПациентов.СостояниеВизита = &СостояниеВизита"; Запрос.УстановитьПараметр("Пациент", Пациент); Запрос.УстановитьПараметр("Время", Время); Запрос.УстановитьПараметр("СостояниеВизита", СостояниеВизита); |
|||
1
1dvd
26.05.17
✎
11:24
|
варианта всего два. объединить выборки до Точки и после точки. Выбрать наименьшую
|
|||
2
Рэйв
26.05.17
✎
11:31
|
Выбрать максимум меньше &Время и минимум после &Время
Сравнивать Разностьдат в первой выборке и -Разностьдат во второй |
|||
3
Рэйв
26.05.17
✎
11:32
|
или во второй выборке от периода отнимать &Вермя - тогда минус не нужен
|
|||
4
Михаил Козлов
26.05.17
✎
11:34
|
Можно попробовать модуль реализовать через ВЫБОР...КОГДА
|
|||
5
FIXXXL
26.05.17
✎
11:35
|
помножь значения Поле1 те, что меньше 0 на -1, отсортируй по Поле1, возьми первую строку
|
|||
6
alexey123perm
26.05.17
✎
11:35
|
Выбор
Когда РазностьДат(Период, &Время,Секунда)>0 Тогда РазностьДат(Период, &Время,Секунда) Иначе -РазностьДат(Период, &Время,Секунда) Конец После таких преобразований отриц. не будет, и самое близкое можно определить по "Минимум". |
|||
7
Sserj
26.05.17
✎
11:36
|
или я чего то не понял или должно быть просто
ВЫБОР КОГДА ПосещенияПациентов.Период > Время Тогда РАЗНОСТЬДАТ(ПосещенияПациентов.Период, &Время, СЕКУНДА) ИНАЧЕ РАЗНОСТЬДАТ(&Время, ПосещенияПациентов.Период, СЕКУНДА) КОНЕЦ КАК Поле1 |
|||
8
alexey123perm
26.05.17
✎
11:37
|
(7) Да, можно и так.
|
|||
9
Prog111
26.05.17
✎
11:40
|
Всем спасибо, буду тестить)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |