|
|
|
Запрос
|
|||
|---|---|---|---|
|
#18+
Помогите составить запрос: есть таблица R: a b c'12-10-2015' 10 5'12-11-2015' 9 6'12-12-2015' 8 7'12-01-2016' 10 6 таблица S: d'3-12-2015''12-12-2015' Требуется для каждого значения из таблицы S выбрать из таблицы R зачения b и c, с максимальным значением даты a, меньшим чем в таблицe S: dabc'3-12-2015' '12-11-2015' 9 6'12-12-2015' '12-12-2015' 8 7 Есть предложение сделать через window-функцию: Код: sql 1. Но я плохо разбираюсь в механизме виндоу-функций, там еще какие-то причуды есть с использованием order by и partition внутри over. Может есть более простое решение, например с having Код: sql 1. ? -- Россия - отличная страна! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2015, 18:25 |
|
||
|
Запрос
|
|||
|---|---|---|---|
|
#18+
PCContra, если 9.3+, то проще всего через lateral. примерно так: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2015, 19:38 |
|
||
|
Запрос
|
|||
|---|---|---|---|
|
#18+
AlexiusPCContra, если 9.3+, то проще всего через lateral. примерно так: Код: sql 1. 2. Да, у меня postgresql-9.4.5. Сейчас попробую)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2015, 19:52 |
|
||
|
Запрос
|
|||
|---|---|---|---|
|
#18+
Вот план: QUERY PLAN Nested Loop (cost=1.43..2.88 rows=2 width=16) (actual time=0.092..0.134 rows=2 loops=1) CTE t -> Unique (cost=0.05..0.06 rows=2 width=0) (actual time=0.049..0.050 rows=2 loops=1) -> Sort (cost=0.05..0.06 rows=2 width=0) (actual time=0.048..0.048 rows=2 loops=1) Sort Key: ('2015-12-11'::date) Sort Method: quicksort Memory: 17kB -> Append (cost=0.00..0.04 rows=2 width=0) (actual time=0.003..0.004 rows=2 loops=1) -> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.001..0.001 rows=1 loops=1) -> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.000..0.000 rows=1 loops=1) -> CTE Scan on t (cost=0.00..0.04 rows=2 width=4) (actual time=0.051..0.055 rows=2 loops=1) -> Limit (cost=1.37..1.37 rows=1 width=12) (actual time=0.036..0.036 rows=1 loops=2) -> Sort (cost=1.37..1.39 rows=9 width=12) (actual time=0.035..0.035 rows=1 loops=2) Sort Key: a.date Sort Method: top-N heapsort Memory: 17kB -> Seq Scan on remote a (cost=0.00..1.33 rows=9 width=12) (actual time=0.012..0.016 rows=14 loops=2) Filter: (t.d > date) Rows Removed by Filter: 13 Planning time: 0.723 ms Execution time: 0.252 ms Нормальный, не? нет ли тут тормозов типа "для каждой строчки первой таблицы мы просматриваем полностью вторую" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2015, 21:56 |
|
||
|
Запрос
|
|||
|---|---|---|---|
|
#18+
PCContra, есть, но для таблицы в 14 строк это не страшно. а так нужен индекс по date, если его еще нет, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2015, 15:12 |
|
||
|
Запрос
|
|||
|---|---|---|---|
|
#18+
Ещё один вариант Код: sql 1. 2. 3. 4. 5. 6. Необходимо учитывать, что если в таблицы R будут две одинаковые максимальные даты, то надо придумать правило отбора требуемой записи, или получать две и более строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=100&tid=1997572]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 274ms |

| 0 / 0 |
