|
SQL запрос. Выбрать минимальную строку по двум полям | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
11.12.13
✎
11:34
|
Набор такой
base_from date_from base_to date_to --------- ------------------------------------------------------ ------- ------------------------------------------------------ МФС 2013-12-08 00:00:00.000 ПФО 2013-12-10 00:00:00.000 МФС 2013-12-08 00:00:00.000 ПФО 2013-12-11 00:00:00.000 МФС 2013-12-09 00:00:00.000 ПФО 2013-12-10 00:00:00.000 МФС 2013-12-09 00:00:00.000 ПФО 2013-12-11 00:00:00.000 |
|||
1
toypaul
гуру
11.12.13
✎
11:34
|
Нужно выбрать строку
МФС 2013-12-09 00:00:00.000 ПФО 2013-12-11 00:00:00.000 |
|||
2
toypaul
гуру
11.12.13
✎
11:35
|
когда поле одно, то вроде понятно. здесь не очень.
решение со складыванием двух полей в одно не нравится. |
|||
3
toypaul
гуру
11.12.13
✎
11:38
|
не минимальную строку, а максимальную конечно же. последнюю в сортировке date_from,date_to
|
|||
4
toypaul
гуру
11.12.13
✎
11:38
|
по ключу base_from,base_to
|
|||
5
Wobland
11.12.13
✎
11:39
|
выбрать первые 1 упорядочить по
|
|||
6
toypaul
гуру
11.12.13
✎
11:40
|
(5) комбинаций base_from,base_to может быть сколько угодно
|
|||
7
Wobland
11.12.13
✎
11:41
|
груп бай?
|
|||
8
Злобная Печенька
11.12.13
✎
11:43
|
(6) таблица одна? или это 2 разных таблицы?
|
|||
9
toypaul
гуру
11.12.13
✎
11:43
|
(7) ты не в теме :)
|
|||
10
toypaul
гуру
11.12.13
✎
11:43
|
(8) это одна таблица
|
|||
11
SUA
11.12.13
✎
11:44
|
чем (5) не устраивает?
|
|||
12
SUA
11.12.13
✎
11:45
|
упорядочить по ** убыв есть
|
|||
13
spock
11.12.13
✎
11:46
|
нужна еще колонка, уникализирующая строки.
групп бай с определеним "а максимальную конечно же", потом джойн на эту же таблицу по уникальному полю, чтобы забрать все остальные колонки. Паша, ты чего? :) |
|||
14
Злобная Печенька
11.12.13
✎
11:46
|
(12) или по возрастанию + выбрать первый результат
|
|||
15
toypaul
гуру
11.12.13
✎
11:48
|
(13) как-то не кошерно. по другому никак?
"ты чего?" = да что-то туплю. "уникализирующая строки" эт понятно. хочется красивее. |
|||
16
toypaul
гуру
11.12.13
✎
11:49
|
(11),(14) вы не в теме.
|
|||
17
acsent
11.12.13
✎
11:49
|
Не уж то ты не умеешь развернуть срез последних? куда катится мир (((
|
|||
18
toypaul
гуру
11.12.13
✎
11:50
|
(17) самый умный? давай запрос
|
|||
19
toypaul
гуру
11.12.13
✎
11:50
|
(11),(14) для тех кто не читает или не вчитывается. уточню что набор может быть такой
base_from date_from base_to date_to --------- ------------------------------------------------------ ------- ------------------------------------------------------ МФС 2013-12-08 00:00:00.000 ПФО 2013-12-10 00:00:00.000 МФС 2013-12-08 00:00:00.000 ПФО 2013-12-11 00:00:00.000 МФС 2013-12-09 00:00:00.000 ПФО 2013-12-10 00:00:00.000 МФС 2013-12-09 00:00:00.000 ПФО 2013-12-11 00:00:00.000 ТФС 2013-12-08 00:00:00.000 ПВО 2013-12-10 00:00:00.000 ТФС 2013-12-08 00:00:00.000 ПВО 2013-12-11 00:00:00.000 ТФС 2013-12-09 00:00:00.000 ПВО 2013-12-10 00:00:00.000 ТФС 2013-12-09 00:00:00.000 ПВО 2013-12-11 00:00:00.000 |
|||
20
acsent
11.12.13
✎
11:51
|
Дважды максиму, сналача по 1 полю, потом по 2, потом
|
|||
21
spock
11.12.13
✎
11:53
|
(15) ну хз, если нужен рандомный генератор, то можно без уникализирующих строк. Но с ними, можно, хотя бы, понять причину, почему такие строки подобрались.
Просто тупо 1, 2, 3, и тд - IDENTITY(1,1) int |
|||
22
acsent
11.12.13
✎
11:54
|
http://kb.mista.ru/article.php?id=92
см. срез последних по регистратору |
|||
23
toypaul
гуру
11.12.13
✎
11:54
|
(20) это уже ближе к теме. об этом думал тоже. есть надежда что есть решение лучше
|
|||
24
toypaul
гуру
11.12.13
✎
11:55
|
(22) да блин. я же написал, что с одним полем понятно. делал уже не один раз.
|
|||
25
acsent
11.12.13
✎
11:55
|
(23) 1с именно так делает
|
|||
26
acsent
11.12.13
✎
11:55
|
(24) по регистратор - это и есть по 2м полям: периолд + ссылка
|
|||
27
toypaul
гуру
11.12.13
✎
11:57
|
(26) хм. пошел думать ...
|
|||
28
spock
11.12.13
✎
11:58
|
(24) ну сорри, чё.
|
|||
29
SUA
11.12.13
✎
12:00
|
вт1: base_from max(date_from) base_to
итог: вт1 (все поля)+исходная таблица(внутреннее соединение по всем полям вт1, max(date_to) ) |
|||
30
toypaul
гуру
11.12.13
✎
12:02
|
эт тоже понятно
|
|||
31
toypaul
гуру
11.12.13
✎
12:03
|
(29) хотя фигня получится
|
|||
32
toypaul
гуру
11.12.13
✎
12:04
|
и по (22) тоже фигня получится
|
|||
33
acsent
11.12.13
✎
12:05
|
(32) покажи запрос
|
|||
34
Gantosha
11.12.13
✎
12:06
|
период + ссылка и максимум не всегда вернет последний , если на один момент времени сидит несколько документов.
Я вот вообще не понимаю что вы ищите .. если просто максимум то проще по ключу определить разницу между интервалами времени , найти максимальный и вытащить ту запись которая ей соответсвует. |
|||
35
toypaul
гуру
11.12.13
✎
12:06
|
точно будет работать вариант из (13)
|
|||
36
toypaul
гуру
11.12.13
✎
12:07
|
(34) что не понятно я написал? по ключу ищу последнюю строку в заданной сортировке.
|
|||
37
acsent
11.12.13
✎
12:08
|
В принципе можно чуть проще сделать чем в срезе (без последнего обертывающего запроса) , ибо тут нет ресурсов
|
|||
38
mistеr
11.12.13
✎
13:00
|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ МАКС(date) КАК СуперМакс ИЗ ( ВЫБРАТЬ МАКС(date_from) КАК date ОБЪЕДИНИТЬ ВЫБРАТЬ МАКС(date_to) )) КАК Макс ПО date_from = Макс.СуперМакс ИЛИ date_to = Макс.СуперМакс Только учти, что строк может оказаться несколько. |
|||
39
Simod
11.12.13
✎
13:09
|
Попробуй так:
SELECT date_from, Max(date_to) FROM T WHERE date_from = (SELECT Max(date_from) FROM T) GROUP BY date_from |
|||
40
Ненавижу 1С
гуру
11.12.13
✎
13:21
|
сначала по первой в подзапросе, потом по второй
|
|||
41
sda553
11.12.13
✎
13:32
|
Кто нибудь может объяснить, что автору надо?
|
|||
42
toypaul
гуру
11.12.13
✎
14:59
|
(40) принято давать sql запрос, тестовый набор и получаемый результат.
(41) есть тестовый набор, есть результат, который надо получить. кому дано, те поняли. |
|||
43
toypaul
гуру
11.12.13
✎
15:05
|
(38),(39) это что вообще я не понимаю? есть тестовый набор, есть результат. нужен запрос, который даст этот результат.
вариант для T-SQL из (13) я уже сделал. интересн вариант без специфики T-SQL. пускай даже неэффективный (интересно сравнить). для набора из (19) должен получится результат base_from date_from base_to date_to --------- ------------------------------------------------------ ------- ------------------------------------------------------ МФС 2013-12-09 00:00:00.000 ПФО 2013-12-11 00:00:00.000 ТФС 2013-12-09 00:00:00.000 ПВО 2013-12-11 00:00:00.000 |
|||
44
Ненавижу 1С
гуру
11.12.13
✎
15:11
|
select T.base_from, T.date_from, T.base_to, MAX(T.date_to) as date_to
from T inner join (select base_from, MAX(date_from) as date_from, base_to from T group by base_from, base_to) as X on T.base_from=X.base_from and T.base_to=X.base_to and T.date_from=X.date_from group by T.base_from, T.date_from, T.base_to |
|||
45
toypaul
гуру
11.12.13
✎
15:16
|
(44) вроде правильно. это тоже самое что в (29) тогда в (31) меня переклинило.
|
|||
46
Simod
12.12.13
✎
11:55
|
(43) Если нужны все записи, то:
SELECT T.date_from, T.date_to FROM T JOIN (SELECT A.date_from, MAX(A.date_to) AS date_to FROM (SELECT MAX(date_from) AS date_from, date_to FROM T GROUP BY date_to) AS A GROUP BY A.date_from) AS B ON T.date_from = B.date_from AND T.date_to = B.date_to |
|||
47
acsent
12.12.13
✎
12:09
|
Но это же и есть срез последних
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |