Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Добрый день. Возможно вопрос элементарный, но я чего-то в затруднении.
Нужно выбрать минимальное значение из столбца "c" из совпадающих по столбцу "n"
При этом выводиться должен и третий столбец.

n c p
-------------
1 6 post1
2 5 post2
2 6 post3
3 40 post2
4 9 post2

вот этот код не работает:
select * into #tmp from data
SELECT data.n, min(data.c) as min, #tmp.p
from data, #tmp
where data.n=#tmp.n
group by data.n, #tmp.n, #tmp.p
drop table #tmp
6 окт 14, 12:26    [16665367]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
select *
      ,min(c) over (partition by n)
  from A;


Результат:
n	c	p	(No column name)
1 6 post1 6
2 6 post3 5
2 5 post2 5
3 40 post2 40
4 9 post2 9
6 окт 14, 12:37    [16665435]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Wlr-l
drgdr,

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
select *
      ,min(c) over (partition by n)
  from A;


Результат:
n	c	p	(No column name)
1 6 post1 6
2 6 post3 5
2 5 post2 5
3 40 post2 40
4 9 post2 9


ого, спасибо!
а как сделать чтобы показывались только строчки с минимальными значениями?
6 окт 14, 12:51    [16665539]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c) over (partition by n) minC
    from A
)

select *
  from B
 where c=minC;


Результат:
n c p minC
1	6	post1	6
2 5 post2 5
3 40 post2 40
4 9 post2 9
6 окт 14, 12:56    [16665586]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Wlr-l, Может так?

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c)   over (partition by n) minC
        ,count(*) over (partition by n) cnt
    from A
)

select *
  from B
 where c=minC and cnt>1;


Результат:
n	c	p	minC	cnt
2 5 post2 5 2
6 окт 14, 13:05    [16665640]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Wlr-l
drgdr,

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c) over (partition by n) minC
    from A
)

select *
  from B
 where c=minC;


Результат:
n c p minC
1	6	post1	6
2 5 post2 5
3 40 post2 40
4 9 post2 9


Спасибо, уважаемый!
6 окт 14, 13:05    [16665641]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Lanselot
Member

Откуда:
Сообщений: 76
drgdr,
;WITH t1 as (
	SELECT ROW_NUMBER() OVER(PARTITION by n ORDER BY c ASC) rn, n, c, p 
	FROM @t)

SELECT n,c,p 
FROM t1
where rn = 1
6 окт 14, 13:06    [16665647]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Lanselot,

спасибо, подошло 16665586
6 окт 14, 13:14    [16665698]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
drgdr
спасибо, подошло 16665586

а производительнсоть вас совсем не итересует ?
6 окт 14, 13:18    [16665717]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

С точки зрения полученного результата min и row_number эквивалентны.
С точки зрения восприятия min предпочтительнее.
С точки зрения планов выполнения row_number предпочтительнее. Это классика.

Поэтому Вам выбирать.
6 окт 14, 13:27    [16665761]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Lanselot
Member

Откуда:
Сообщений: 76
drgdr,
А попробуйте-ка оба варианта на таких данных:
with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (3, 20, 'post2'),
                 (3, 20, 'post3'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
6 окт 14, 13:49    [16665883]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Lanselot
Member

Откуда:
Сообщений: 76
Wlr-l
С точки зрения полученного результата min и row_number эквивалентны.

Не согласен.
6 окт 14, 13:51    [16665895]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Lanselot
Wlr-l
С точки зрения полученного результата min и row_number эквивалентны.

Не согласен.

Не эквивалентны
with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c) over (partition by n) minC
    from A
)

select n,c,p
  from B
 where c=minC;

;with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
SELECT n,c,p 
from(
	SELECT ROW_NUMBER() OVER(PARTITION by n ORDER BY c ASC) rn, n, c, p 
	FROM A
	) t1
where rn = 1
6 окт 14, 13:56    [16665921]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

И что, полученные результаты отличаются? Чем?
6 окт 14, 14:25    [16666065]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,

И что, полученные результаты отличаются? Чем?

Количеством записей, например.
6 окт 14, 14:26    [16666069]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

можете привести пример?
6 окт 14, 14:27    [16666080]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,

можете привести пример?

Я уже привел.
6 окт 14, 14:29    [16666097]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Запрос 1.
with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c)   over (partition by n) minC
    from A
)

select *
  from B
 where c=minC


Запрос 2.
with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,row_number() over (partition by n order by c) rn
    from A
)

select *
  from B
 where rn=1;



Результат запроса 1:
1	6	post1
2 5 post2
3 40 post2
4 9 post2
Результат запроса 2:
1	6	post1
2 5 post2
3 40 post2
4 9 post2

Найдите 10 отличий в количестве записей!
6 окт 14, 14:36    [16666145]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Найдите 10 отличий в количестве записей!

Сначала найдите мой пост с данными
6 окт 14, 14:38    [16666160]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
первый случай, когда с Вами должен согласиться.
6 окт 14, 14:42    [16666187]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Lanselot
Member

Откуда:
Сообщений: 76
Wlr-l,
Запрос 1. - Возвращает все строки с минимальными значениями для группы
Запрос 2. - Возвращает только одну строку для группы.

PS^ и давайте уже считать разными запросы, которые возвращают разные данные.
6 окт 14, 14:47    [16666235]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Lanselot,

1.Да в этом плане запросы разные, признаю.

2.ROW_NUMBER я уже сказал, что это классика.
6 окт 14, 14:58    [16666330]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,
первый случай, когда с Вами должен согласиться.

Ничего. Я здесь надолго.
6 окт 14, 15:00    [16666347]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Glory
drgdr
спасибо, подошло 16665586

а производительнсоть вас совсем не итересует ?


Да, производительность интересует. В таблице будет много данных.
Но по сути задачи - нужно выводить все минимальные (это я не предусмотрел изначально).
Насколько драматично min медленнее row_number?
6 окт 14, 15:02    [16666368]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,
Используйте row_number. Так будет правильнее. Если min, то придется добавить еще distinct.

В плане быстродействия основное время тратится на сортировку, если есть подходящий индекс, то это существенно повысит быстродействие.
6 окт 14, 15:08    [16666410]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Wlr-l
drgdr,
Используйте row_number.

Мне нужно выводить все, а вариант с row_number выдает только 1 из самых дешевых.
6 окт 14, 15:15    [16666476]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
drgdr
а вариант с row_number выдает только 1 из самых дешевых.

А кроме row_number есть еще другие функция ранжирования
6 окт 14, 15:22    [16666521]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

"нужно выводить все минимальные (это я не предусмотрел изначально)", "Мне нужно выводить все, а вариант с row_number выдает только 1 из самых дешевых". Т.е. до сих пор задача не определена.

Наверно, нужно еще раз описать полностью задачу, привести исходные данные, отражающие характерные варианты и привести желаемый результат. Потому что из Вашего описания задачи и Вашего запроса я понял, что нужно так:

Результат:
n	c	p	(No column name)
1 6 post1 6
2 6 post3 5
2 5 post2 5
3 40 post2 40
4 9 post2 9
6 окт 14, 15:30    [16666627]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Glory
А кроме row_number есть еще другие функция ранжирования

Если Вы говорите про DENSE_RANK, то получается так:

with tmp as (
select *
,DENSE_RANK() OVER (partition by n order by c) rn
from data
)

select *
from tmp
where rn=1
6 окт 14, 15:34    [16666701]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
drgdr
то получается так:

И что на этот раз неправильно ?
6 окт 14, 15:35    [16666710]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,
Если использовать такие данные, то какой результат будет правильным?
with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c) over (partition by n) minC
    from A
)

select distinct n,c,p
  from B
 where c=minC;

;with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
SELECT n,c,p 
from(
	SELECT ROW_NUMBER() OVER(PARTITION by n ORDER BY c ASC) rn, n, c, p 
	FROM A
	) t1
where rn = 1


Результат запроса 1:
n	c	p
1 6 post1
2 5 post2
2 5 post3
3 40 post2
4 9 post2

Результат запроса 2:
n	c	p
1 6 post1
2 5 post3
3 40 post2
4 9 post2

Как видим, что не все так очевидно и однозначно.
6 окт 14, 15:38    [16666741]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Glory
И что на этот раз неправильно ?

Просто не был знаком с этой функцией. На нескольких примерах с ней получился нужный ответ. Решил уточнить правильно ли я понял.
6 окт 14, 15:39    [16666749]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Wlr-l
drgdr,
Если использовать такие данные, то какой результат будет правильным?
...
Как видим, что не все так очевидно и однозначно.


Да, мне нужен результат как в первом примере, но так как min - это долго, думаю правильнее использовать DENSE_RANK()
6 окт 14, 15:42    [16666766]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

Вас напугали производительностью. Эти запросы примерно одинаковые по производительности (см. планы выполнения).
С мин больше квадратиков, но это не так страшно. На нескольких миллионах строк Вы не заметите разницу.
6 окт 14, 15:52    [16666828]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Наверно, я слишком рано согласился с Вами.
6 окт 14, 15:53    [16666838]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
я слишком рано согласился с Вами.

Т.е. вы будете настаивать, что запросы эквивалентны ?
6 окт 14, 15:55    [16666848]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Wlr-l,
Если во втором запросе окно описать так:

	SELECT ROW_NUMBER() OVER(PARTITION by n,p ORDER BY c ASC) rn, n, c, p 

, то запросы дадут одинаковый результат.
6 окт 14, 15:56    [16666859]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
Нет, в том, что условия задачи конкретизировались позже.
6 окт 14, 15:57    [16666865]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
, то запросы дадут одинаковый результат.

Вы уверены ? Проверили на всех возможных вариантах данных ?
6 окт 14, 15:58    [16666879]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,
Нет, в том, что условия задачи конкретизировались позже.

А это кто-то оспаривал ?
6 окт 14, 15:59    [16666882]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Скорее нет. Но Вы повторили пример автора варианта с ROW_NUMBER, и не заметили что могут быть и такие данные:
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')


а на этих данный мой запрос с мин решает задачу, а с ROW_NUMBER не решает.
В первом случает требуется удаление дубликатов, а во втором изменить определение окна.
6 окт 14, 16:05    [16666920]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
а на этих данный мой запрос с мин решает задачу, а с ROW_NUMBER не решает.

Вообще-то разговор был про вашу фразу об эквивалентности запросов.
Было показано, что запросы неэквивалентны.
Никто не говорит, что, переписав запросы, можно сделать их эквивалентными.
6 окт 14, 16:07    [16666932]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Lanselot
Member

Откуда:
Сообщений: 76
drgdr
Нужно выбрать минимальное значение из ...


Если "минимальное" - то наверное одно и единственное?
Просто ТС изначально неверно описал условия конечной задачи.
6 окт 14, 16:12    [16666962]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Точно также методом последовательного приближения решить задачу. Как видим потребовалось несколько вариантов запросов, чтобы понять, что нужно было на самом деле.
6 окт 14, 16:12    [16666966]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,

Точно также методом последовательного приближения решить задачу. Как видим потребовалось несколько вариантов запросов, чтобы понять, что нужно было на самом деле.

Я про это "С точки зрения полученного результата min и row_number эквивалентны." 16665761
А ыы про что?
6 окт 14, 16:15    [16666982]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Можете проверить:

with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
, B as (
  select *
        ,min(c) over (partition by n) minC
    from A
)

select distinct n,c,p
  from B
 where c=minC;

;with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
SELECT n,c,p 
from(
	SELECT ROW_NUMBER() OVER(PARTITION by n,p ORDER BY c ASC) rn, n, c, p 
	FROM A
	) t1
where rn = 1


Результат одного и другого:
n	c	p
1 6 post1
2 5 post2
2 5 post3
3 40 post2
4 9 post2
6 окт 14, 16:18    [16666997]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Про то, что ни первый, ни второй запрос не решили исходной задачи. Но в первом случае есть дубликаты, во втором случае - нет нужных строк. Так какой запрос более правильный?
6 окт 14, 16:20    [16667007]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Можете проверить:

Слушайте. Хватит прикидываться.
Вы ПЕРЕписали запрос.
С учетом много раз измененной формулировки задачи.
Дочитайте ДО указанного поста. И докажите _на тот момент_ времени, что запросы эквивалентны.
6 окт 14, 16:20    [16667012]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,

Про то, что ни первый, ни второй запрос не решили исходной задачи. Но в первом случае есть дубликаты, во втором случае - нет нужных строк. Так какой запрос более правильный?

А причем тут "я слишком рано согласился с Вами" ?
Что и кому вы хотите доказать ?
Что "распределение" - это уникальная задача ?
6 окт 14, 16:22    [16667023]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
Да переписал оба запроса, чтобы решить исходную задачу.

Не будьте злопамятны, потому что и я такой. Тогда Вы не смогли помощь человеку получить данные для гистограммы.
6 окт 14, 16:27    [16667046]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Не будьте злопамятны, потому что и я такой.

Оно и видно.
Сначала соглашаюсь. Потом не соглашаюсь.
Мне ваше согласие не нужно.
6 окт 14, 16:30    [16667059]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

Кстати запрос с dense_rank тоже не решает исходную задачу:
;with A as (
  select *
    from (values (1,  6, 'post1'),
                 (2,  5, 'post2'),
                 (2,  5, 'post2'),
                 (2,  5, 'post3'),
                 (2,  6, 'post3'),
                 (3, 40, 'post2'),
                 (4,  9, 'post2')
         ) as T(n, c, p)
)
SELECT n,c,p 
from(
	SELECT dense_rank() OVER(PARTITION by n ORDER BY c ASC) rn, n, c, p 
	FROM A
	) t1
where rn = 1


Результат:
n	c	p
1 6 post1
2 5 post2
2 5 post3
2 5 post2
3 40 post2
4 9 post2

Получаются дубликаты. Изменение определения окна на OVER(PARTITION by n,p ORDER BY c ASC) тоже ну удаляет дубликаты.
6 окт 14, 16:33    [16667075]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Кстати запрос с dense_rank тоже не решает исходную задачу:

А он и не предлагался для _исходной_ задачи
6 окт 14, 16:34    [16667088]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
И все же я благодарен Вам и Lanselot, что обратили внимание на появление дубликатов. В конечном итоге это позволило решить задачу.
6 окт 14, 16:36    [16667102]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

"А он и не предлагался для _исходной_ задачи".
"А кроме row_number есть еще другие функция ранжирования".

drgdr:

Если Вы говорите про DENSE_RANK, то получается так:

with tmp as (
select *
,DENSE_RANK() OVER (partition by n order by c) rn
from data
)

select *
from tmp
where rn=1
6 окт 14, 16:38    [16667123]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
"А он и не предлагался для _исходной_ задачи".
"А кроме row_number есть еще другие функция ранжирования".

Круто. А к этого ответа все еще решалась _исходная_ задача ?
У вас странное понятие времени. Вы тасуете посты так, как вам нравится.
Это называется "вырывать из контекста"
6 окт 14, 16:40    [16667135]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
Замечание о DENSE_RANK адресована не Вам, а drgdr, если Вы заметили. Не нужно отвечать на то, что не для Вас, тем более, что лично Вашего решения рассматриваемой здесь задачи нет, а критиковать...
6 окт 14, 16:45    [16667158]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Замечание о DENSE_RANK адресована не Вам, а drgdr, если Вы заметили.

А цитаты
Glory,

"А он и не предлагался для _исходной_ задачи".
"А кроме row_number есть еще другие функция ранжирования".

кому адресованы ?

Wlr-l
тем более, что лично Вашего решения рассматриваемой здесь задачи нет, а критиковать...

Я смотрю вам указания на ваши промахи не нравятся ?
6 окт 14, 16:47    [16667168]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
Почему же слова благодарности всем кто помог решить задачу я уже привел в сообщении 16667102.
Да бывают промахи и не только у меня.
6 окт 14, 16:52    [16667200]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Почему же слова благодарности всем кто помог решить задачу я уже привел в сообщении 16667102.

Так я не понял - запросы были эквивалентны или не были ?

И кому были адресованы цитаты

"А он и не предлагался для _исходной_ задачи".
"А кроме row_number есть еще другие функция ранжирования".
6 окт 14, 16:54    [16667218]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Отстаете от жизни, в сообщении 16666330 я написал:
1.Да в этом плане запросы разные, признаю.
6 окт 14, 16:59    [16667251]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
Wlr-l
drgdr,

Кстати запрос с dense_rank тоже не решает исходную задачу:
...
Получаются дубликаты. Изменение определения окна на OVER(PARTITION by n,p ORDER BY c ASC) тоже ну удаляет дубликаты.


Спасибо. В реальной исходной таблице повторов скорее всего не будет. Но если они будут - должны удаляться.
6 окт 14, 16:59    [16667256]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
drgdr,

т.е. у Вас есть три варианта: min, row_number и dense_rank, поэтому есть из чего выбирать.
6 окт 14, 17:02    [16667281]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Glory,

Отстаете от жизни, в сообщении 16666330 я написал:
1.Да в этом плане запросы разные, признаю.

Это вы опять "перемещаетесь во времени" так, как вам нужно.

16666838 - тут вы уже не согласны.
Только так и непонятно счем собственно.
6 окт 14, 17:02    [16667283]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,
У вас плохо с логикой, я не согласился с тем, что первоначально предложенные запросы, решают поставленную задачу.
Если не считать дубликаты (что не так страшно), то мой запрос с мин решает задачу, а вариант с нумераций строк не решает, потому что выдает не все нужные строки (что гораздо хуже).
Почему то, к запросу с нумерацией строк у Вас не возникает вопросов.
Нужно не упираться во что-то, а все же решить поставленную задачу. Вы ничего не сделали для этого. Как всегда прицепились к второстепенным деталям, захламили обсуждение.
6 окт 14, 17:11    [16667356]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
У вас плохо с логикой, я не согласился с тем, что первоначально предложенные запросы, решают поставленную задачу.

Это у вас плохо с логикой
Единственное, что я оспаривал - это ваша заявление об эквивалентности.
И вы с этим согласились.
Ни о чем другом, я с вам лично не спорил. А вот вы по всей видиости, о чем то со мной спорили. Но где-то там у себя. И поэтому высказали несогласие.

Wlr-l
Как всегда прицепились к второстепенным деталям, захламили обсуждение.

А началось все с вашего "Наверно, я слишком рано согласился с Вами."
Контролируйте свой поток мыслей и не будет захламления.
6 окт 14, 17:18    [16667415]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Glory,

Нет это началось гораздо раньше.

"Контролируйте свой..." - это должно соблюдаться не только мной.

Всем удачи!
6 окт 14, 17:20    [16667436]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wlr-l
Нет это началось гораздо раньше.

Я понял. В теме про гистограммы
6 окт 14, 17:22    [16667448]     Ответить | Цитировать Сообщить модератору
 Re: минимальное значение в столбце с объединением по соседнему столбцу  [new]
drgdr
Member

Откуда:
Сообщений: 45
drgdr
Спасибо. В реальной исходной таблице повторов скорее всего не будет. Но если они будут - должны удаляться.

Так что, уважаемые, есть идеи как избавиться от дублей?
7 окт 14, 13:15    [16670764]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Microsoft SQL Server Ответить