|
Как в запросе определить минимум разностей дат? |
☑ |
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
|
Всем спасибо, буду тестить)
|
|