![]() |
|
Соединение по первой строке в запросе | ☑ | ||
---|---|---|---|---|
0
MaiorovYury
19.06.13
✎
10:04
|
Подскажите, как сделать соединение двух таблиц, только чтобы выбиралась только первая строка из второй таблицы
Что-то вроде этого ВЫБРАТЬ * ИЗ ВТДаты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ ВТСостояния УПОРЯДОЧИТЬ ПО Период) ПО ВТСостояния.Период>=ВТДаты.ДатаКалендаря И Количество(ВТСостояния.Период)=1 |
|||
1
vicof
19.06.13
✎
10:06
|
из второй таблицы нужно выбирать первые 1
|
|||
2
MaiorovYury
19.06.13
✎
10:09
|
(1) а как там условие вписать что Период>=ВТДаты.ДатаКалендаря
|
|||
3
vicof
19.06.13
✎
10:11
|
(2) какая изначально задача стоит?
|
|||
4
MaiorovYury
19.06.13
✎
10:20
|
Есть таблица с рабочими датами (ВТДаты)
01.05.13 02.05.13 05.05.13 06.05.13 07.05.13 Есть таблица с состояниями работников (ВТСостояния) в таком виде 01.05.13 Работает 05.05.13 Болеет 07.05.13 Работает Надо их объединить 01.05.13 Работает 02.05.13 Работает 05.05.13 Болеет 06.05.13 Болеет 07.05.13 Работает |
|||
5
vicof
19.06.13
✎
10:23
|
(4) не взлетит
|
|||
6
MaiorovYury
19.06.13
✎
10:23
|
Может можно сначала объединить ВТСостояния чтобы получить
01.05.13 Работает 05.05.13 Более 05.05.13 Болеет 07.05.13 Работает 07.05.13 Работает ? Правда я так понимаю это та же задача |
|||
7
vicof
19.06.13
✎
10:23
|
(5) Какая задача стоит еще первичней?
|
|||
8
MaiorovYury
19.06.13
✎
10:23
|
(5) то есть через запрос невозможно?
|
|||
9
Ёпрст
гуру
19.06.13
✎
10:24
|
(0) и зачем тут первая строка ?
Тупо левое соедиение, даты с таблички дат, состояние - с таблички состояний и привет, условие соединенеия знак меньши или равно по дате. Всё. |
|||
10
Ёпрст
гуру
19.06.13
✎
10:24
|
(6) не надо.
|
|||
11
Ненавижу 1С
гуру
19.06.13
✎
10:24
|
(8) почему нет? возможно
|
|||
12
vicof
19.06.13
✎
10:25
|
(6) вообще у регистра состояний есть ресурс СостояниеЗавершения
|
|||
13
Smallrat
19.06.13
✎
10:25
|
(8) можно, если я правильно понял что имеется ввиду
делаешь второй запрос с группировкой по максимум(период), а потом соединяешь с ним же по максимум(период) = Период и получаешь одну запись. |
|||
14
MaiorovYury
19.06.13
✎
10:26
|
(12) Да только он не всегда заполнен
|
|||
15
vicof
19.06.13
✎
10:32
|
(14) Его обрабатывать надо
http://infostart.ru/public/102648/ лови |
|||
16
MaiorovYury
19.06.13
✎
10:35
|
(13) получилось сгруппировать с максимальным периодом
Наворочено получается конечно, но хоть как-то))) Спасибо! |
|||
17
MaiorovYury
19.06.13
✎
10:36
|
(15) и за ссылочку спасибо!
Читаю))) |
|||
18
Ненавижу 1С
гуру
19.06.13
✎
10:40
|
можно таблицу состояний соединить саму с собой и получить периоды действия, а потом таблицу дат соединить с таблицей периодов
|
|||
19
MaiorovYury
19.06.13
✎
12:03
|
(18) а как состояния то соединить саму с собой?
Там же тоже надо по одной строке выбирать. То же самое что я в самом начале писал. |
|||
20
Ненавижу 1С
гуру
19.06.13
✎
12:19
|
(19) а вот так:
выбрыть ВТСостояния1.Дата, ВТСостояния1.Состояние, ЕСТЬNULL(МИНИМУМ(ВТСостояния1.Дата),ДАТАВРЕМЯ(2100,1,1)) КАК Конец ИЗ ВТСостояния как ВТСостояния1 ЛЕВОЕ СОЕДИНЕНИЕ ВТСостояния КАК ВТСостояния2 ПО ВТСостояния1.Дата<=ВТСостояния2.Дата СГРУППИРОВАТЬ ПО ВТСостояния1.Дата, ВТСостояния1.Состояние |
|||
21
MaiorovYury
19.06.13
✎
12:32
|
(20)
Там где МИНИМУМ должно быть ВТСОстояния2, а не 1 Это если кому-то еще понадобится. И имхо это самый крутой вариант! Спасибо! |
|||
22
Ненавижу 1С
гуру
19.06.13
✎
12:41
|
(21) да, я ошибся
|
|||
23
zak555
19.06.13
✎
14:30
|
(9) может больше или равно ?
|
|||
24
zak555
19.06.13
✎
14:43
|
(20) есть нулл зачем ?
|
|||
25
MaiorovYury
19.06.13
✎
14:56
|
(24) есть нулл я не использовал - мне все равно что там в последней строке будет
|
|||
26
zak555
20.06.13
✎
15:16
|
(4)
ВЫБРАТЬ ВТДаты.Поле1, ВТСостояние.Поле2 КАК Статус, РАЗНОСТЬДАТ(ВТСостояние.Поле1, ВТДаты.Поле1, ДЕНЬ) КАК КолДней ПОМЕСТИТЬ ВТ ИЗ ВТДаты КАК ВТДаты ЛЕВОЕ СОЕДИНЕНИЕ ВТСостояние КАК ВТСостояние ПО ВТДаты.Поле1 >= ВТСостояние.Поле1 СГРУППИРОВАТЬ ПО ВТДаты.Поле1, ВТСостояние.Поле1, ВТСостояние.Поле2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Поле1, ВТ.Статус ИЗ ВТ КАК ВТ ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ВТ.Поле1 КАК Поле1, МИНИМУМ(ВТ.КолДней) КАК КолДней ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Поле1) КАК вложенныйЗапрос ПО ВТ.Поле1 = вложенныйЗапрос.Поле1 И ВТ.КолДней = вложенныйЗапрос.КолДней СГРУППИРОВАТЬ ПО ВТ.Поле1, ВТ.Статус |
|||
27
Ненавижу 1С
гуру
20.06.13
✎
15:31
|
(24) чтобы корректно потом сравнивать на вхождение в интервал
|
|||
28
zak555
20.06.13
✎
18:30
|
(27) тогда чем твоё (20) отличается от ?
ВЫБРАТЬ ВТСостояние.Поле1, ВТСостояние.Поле2, ВТСостояние.Поле1 КАК Конец ИЗ ВТСостояние |
|||
29
Serginio1
20.06.13
✎
19:06
|
||||
30
Serginio1
20.06.13
✎
19:07
|
29+ тьфу 228
|
|||
31
zak555
20.06.13
✎
19:13
|
и что это даёт ?
|
|||
32
Ненавижу 1С
гуру
20.06.13
✎
19:29
|
(28) там доложно быть строгое неравенство, ошибся, бывает
|
|||
33
zak555
20.06.13
✎
19:34
|
(32) тоже самое
|
|||
34
Ненавижу 1С
гуру
20.06.13
✎
19:37
|
(33) что ты! ни раз делал, даже здесь делал: v8: Сравнение способов получения среза последних на каждую дату в запросе
|
|||
35
zak555
20.06.13
✎
19:42
|
(34) так ты сам проверь
|
|||
36
Ненавижу 1С
гуру
20.06.13
✎
19:46
|
(35) так пишу же - работает нах
|
|||
37
zak555
20.06.13
✎
19:47
|
(36) вот это ?
выбрать ВТСостояния1.Поле1, ВТСостояния1.Поле2, ЕСТЬNULL(МИНИМУМ(ВТСостояния1.Поле1),ДАТАВРЕМЯ(2100,1,1)) КАК Конец ИЗ ВТСостояние как ВТСостояния1 ЛЕВОЕ СОЕДИНЕНИЕ ВТСостояние КАК ВТСостояния2 ПО ВТСостояния1.Поле1<>ВТСостояния2.Поле1 СГРУППИРОВАТЬ ПО ВТСостояния1.Поле1, ВТСостояния1.Поле2 и оно соответствует (4) ? |
|||
38
EvgeniuXP
20.06.13
✎
20:54
|
(0) 4-ый модуль - зарплата, Гилев - там решения есть.
|
|||
39
Ненавижу 1С
гуру
20.06.13
✎
20:56
|
(37) перестал ты, читай сначала все
|
|||
40
zak555
21.06.13
✎
09:52
|
(39) ???
|
|||
41
Ненавижу 1С
гуру
21.06.13
✎
10:18
|
(40) v8: Сравнение способов получения среза последних на каждую дату в запросе тут этот принцип работает
|
|||
42
zak555
21.06.13
✎
10:19
|
(41) это я смотрел, но (37) не работает по условию (4)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |