Имя: Пароль:
IT
 
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
Но это же и есть срез последних
Основная теорема систематики: Новые системы плодят новые проблемы.