Вход | Регистрация
 

Как выбрать N первый ПТУ в запросе

Как выбрать N первый ПТУ в запросе
Я
   Hipocrisy2013
 
03.07.19 - 14:36
Есть список номенклатуры, как запросом выбрать последние N ПТУ по этим позициям?
 
 
   Ёпрст
 
1 - 03.07.19 - 14:37
top N ... order by ask
   Hipocrisy2013
 
2 - 03.07.19 - 14:38
как понять топ?
   Ёпрст
 
3 - 03.07.19 - 14:40
(2)
https://docs.microsoft.com/ru-RU/sql/t-sql/queries/top-transact-sql?view=aps-pdw-2016

ну или Выбрать Первые, если не знаком с англ. синтаксисом
   Hipocrisy2013
 
4 - 03.07.19 - 14:41
Допустим у меня есть запрос который выдает:

А  Ссылка1
А  Ссылка2
А  Ссылка3
С  Ссылка4
С  Ссылка5
С  Ссылка6

как мне сделать чтобы получилось

А Ссылка1
А Ссылка2
С Ссылка4
С Ссылка5
   sqr4
 
5 - 03.07.19 - 14:42
Выбрать первые 4
   sqr4
 
6 - 03.07.19 - 14:42
а не
   Ёпрст
 
7 - 03.07.19 - 14:44
(4) по какому признаку надо исключить А  Ссылка3 и С  Ссылка6 ?
для каждого А или С оставить первые 2 ? Так что ле ?
   sqr4
 
8 - 03.07.19 - 14:45
   sqr4
 
9 - 03.07.19 - 14:45
вот так короче
   Hipocrisy2013
 
10 - 03.07.19 - 14:46
(7) да
 
 Рекламное место пустует
   Hipocrisy2013
 
11 - 03.07.19 - 14:47
(9) я читал эту статью, я не особо понял как юзать счетчик
   sqr4
 
12 - 03.07.19 - 14:47
че млять
   sqr4
 
13 - 03.07.19 - 14:47
ВЫБРАТЬ 
   ПоступлениеТоваровУслуг.Контрагент КАК Контрагент, 
   ПоступлениеТоваровУслуг.Ссылка КАК Ссылка, 
   КОЛИЧЕСТВО(ПоступлениеТоваровУслуг_1.Ссылка) КАК Номер 
ИЗ 
   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг 
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг_1 
       ПО ПоступлениеТоваровУслуг.Дата <= ПоступлениеТоваровУслуг_1.Дата 
           И ПоступлениеТоваровУслуг.Контрагент = ПоступлениеТоваровУслуг_1.Контрагент 

СГРУППИРОВАТЬ ПО 
   ПоступлениеТоваровУслуг.Ссылка, 
   ПоступлениеТоваровУслуг.Контрагент 

ИМЕЮЩИЕ 
   КОЛИЧЕСТВО(ПоступлениеТоваровУслуг_1.Ссылка) <= 5 

УПОРЯДОЧИТЬ ПО 
   Контрагент, 
   Номер
   sqr4
 
14 - 03.07.19 - 14:48
Че тут неясного?
   sqr4
 
15 - 03.07.19 - 14:49
а не, это я туплю
   novichok79
 
16 - 03.07.19 - 15:01
вот тут только первые будут

ВЫБРАТЬ 
   Т.Номенклатура КАК Номенклатура, 
   МАКСИМУМ(ПоступлениеТоваровУслуг.Ссылка) КАК ПоследнееПТУ 
ИЗ 
   Документ.ПоступлениеТоваровУслуг.Товары КАК Т 

СГРУППИРОВАТЬ ПО 
   Т.Номенклатура
   novichok79
 
17 - 03.07.19 - 15:04
сразу приходят на ум похожие запросы в которых выбираешь максимум(ссылка), но чтобы это максимальное ПТУ по позиции не было равно уже найденному последнему документу, потом соединяешь запросы через "объединить"
но это костыльный способ такой.
   sqr4
 
18 - 03.07.19 - 15:05
(17) в (13) уже готовое решение, что вы тупите
   bolobol
 
19 - 03.07.19 - 15:07
(18) теперь ещё и повторить (15))))))
   novichok79
 
20 - 03.07.19 - 15:17
(18) ты глупый что-ли? твой запрос сначала отработает соединение, и будет брать документы в том порядке, как они в таблице SQL лежат, а потом будет сортировать записи по количеству документов. проверь на реальной базе, а мы посмеемся.
в итоге у тебя может получиться такое.

Приобретение товаров и услуг ЖП00-000427 от 31.03.2018 15:59:05    1
Приобретение товаров и услуг ЖП00-000426 от 28.02.2018 15:49:36    2
Приобретение товаров и услуг ЖП00-000239 от 31.01.2018 12:53:41    3
Приобретение товаров и услуг ЖП00-000238 от 01.01.2018 12:51:53    4
Приобретение товаров и услуг ЖП00-000237 от 01.01.2018 12:49:12    5
   sqr4
 
21 - 03.07.19 - 15:22
(20) не тупее некоторых, еще раз прочитай запрос, потом еще и еще пока не придет просветление
   sqr4
 
22 - 03.07.19 - 15:23
(20) и да запрос не мой
   novichok79
 
23 - 03.07.19 - 15:23
(21) ко-ко-ко
   novichok79
 
24 - 03.07.19 - 15:24
если хронологический порядок ПТУ в запросе не соблюдается, зачем пользаку такие данные?
   sqr4
 
25 - 03.07.19 - 15:27
(23) 32х-летний петушок... Я постоянно разочаровываюсь, когда вижу такое поведение у взрослых мужиков.
(24) В приведенном мной запросе как раз выведутся последние данные по дате, а вот брать максимум по ссылке, это да, умный ход
   novichok79
 
26 - 03.07.19 - 15:29
(25) ааххаха, ок, давай по-твоему. петух твой батя.
(25) ага, я то на реальных данных посмотрел. но если тебе хочется спорить, то делай это наздоровье.
   sqr4
 
27 - 03.07.19 - 15:33
(26) я вот этого (23) не писал, это написал ты, отсюда и вывод из (25) На чем основам твой вывод.
А это так для общего тебе развития, может перестанешь людей оскарблять http://catalog.mista.ru/public/635159/
   ptiz
 
28 - 03.07.19 - 15:36
Как пример (но это если товар встречался по 1 разу в накладной):

ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура,
    ПоступлениеТоваровТовары1.Ссылка КАК ПоступлениеТоваров
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары1
        ПО (ПоступлениеТоваровТовары1.Номенклатура = СпрНоменклатура.Ссылка)
            И (ПоступлениеТоваровТовары1.Ссылка В
                (ВЫБРАТЬ ПЕРВЫЕ 3
                    ПоступлениеТоваровТовары.Ссылка КАК ПоступлениеТоваров
                ИЗ
                    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
                ГДЕ
                    ПоступлениеТоваровТовары.Номенклатура = ПоступлениеТоваровТовары1.Номенклатура
                УПОРЯДОЧИТЬ ПО
                    ПоступлениеТоваровТовары.Ссылка.Дата УБЫВ))
ГДЕ
    СпрНоменклатура.Ссылка В(&МассивТоваров)
   novichok79
 
29 - 03.07.19 - 15:40
(27) ок, просто свой запрос ты не проверил. да, максимум по ссылке - неправильно. правильнее в (28)
   timurhv
 
30 - 03.07.19 - 15:46
(0) На кой вы пытаетесь со своей больной фантазией писать запросы?
Обрабатывайте в коде.
   timurhv
 
31 - 03.07.19 - 15:51
(28) Не пишите больше запросы, это не ваше
   sqr4
 
32 - 03.07.19 - 15:53
(29) дада правильние, куда уж там и более читаемое)
   novichok79
 
33 - 03.07.19 - 15:58
(32) это единственный способ без максимумов решить задачу, по-моему.
 
 
   sqr4
 
34 - 03.07.19 - 16:02
(33) чем отличается определение максимума от сортировки, гений ты наш 32х-летний?
   sqr4
 
35 - 03.07.19 - 16:03
и где в (13) ты видишь максимумы???
   sqr4
 
36 - 03.07.19 - 16:05
Хотя, вероятнее всего, не буду утверждать наверняка, что пример (28) работает быстрее, чем соединение таблицы с собой полностью. Но не уверен
   novichok79
 
37 - 03.07.19 - 16:09
(34) на уровне СУБД, системе все равно придется искать максимальное значение.
(35) тут имеются в виду, функции агрегации, ок.
(36) ну что ж, 25-летний вундеркинд, давай замеры в студию.
   sqr4
 
38 - 03.07.19 - 16:11
(37) я решение привел, в отличие от некоторых. А дальше если ТСу надо пусть мерит.
   novichok79
 
39 - 03.07.19 - 16:15
(38) решение которое не учитывает хронологию такое себе, смотри (24). по мне нормально будет и (28) на небольших данных
   sqr4
 
40 - 03.07.19 - 17:41
(39) решение из (13)  все учитывает... ну имеет смысл вместо сортировки по номеру добавить сортировку по дате. В любом случае лучше твоего гораздо)
   novichok79
 
41 - 03.07.19 - 17:55
(40) по дате это так?

ВЫБРАТЬ
    Т.Контрагент КАК Контрагент,
    Т.Ссылка КАК Ссылка,
    Т.Дата КАК Дата,
    КОЛИЧЕСТВО(Т1.Ссылка) КАК Номер
ИЗ
    Документ.ПриобретениеТоваровУслуг КАК Т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг КАК Т1
        ПО (Т.Дата <= Т1.Дата)
            И (Т.Контрагент = Т1.Контрагент)

СГРУППИРОВАТЬ ПО
    Т.Ссылка,
    Т.Контрагент,
    Т.Дата

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Т1.Ссылка) <= 5

УПОРЯДОЧИТЬ ПО
    Контрагент,
    Дата
АВТОУПОРЯДОЧИВАНИЕ
   novichok79
 
42 - 03.07.19 - 17:59
если да, то
5по счету 
Приобретение товаров и услуг от 07.06.2018 15:27:14
1по счету 
Приобретение товаров и услуг от 18.07.2018 23:59:59
3по счету
Приобретение товаров и услуг от 25.06.2018 16:31:59

а это будет неправильный результат.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует