Имя: Пароль:
1C
 
Как выбрать N первый ПТУ в запросе ☑
0 Hipocrisy2013
 
03.07.19
✎
14:36
Есть список номенклатуры, как запросом выбрать последние N ПТУ по этим позициям?
1 Ёпрст
 
гуру
03.07.19
✎
14:37
top N ... order by ask
2 Hipocrisy2013
 
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

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

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

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

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

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

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

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

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

СГРУППИРОВАТЬ ПО
   Т.Номенклатура
17 novichok79
 
03.07.19
✎
15:04
сразу приходят на ум похожие запросы в которых выбираешь максимум(ссылка), но чтобы это максимальное ПТУ по позиции не было равно уже найденному последнему документу, потом соединяешь запросы через "объединить"
но это костыльный способ такой.
18 sqr4
 
03.07.19
✎
15:05
(17) в (13) уже готовое решение, что вы тупите
19 bolobol
 
03.07.19
✎
15:07
(18) теперь ещё и повторить (15))))))
20 novichok79
 
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
21 sqr4
 
03.07.19
✎
15:22
(20) не тупее некоторых, еще раз прочитай запрос, потом еще и еще пока не придет просветление
22 sqr4
 
03.07.19
✎
15:23
(20) и да запрос не мой
23 novichok79
 
03.07.19
✎
15:23
(21) ко-ко-ко
24 novichok79
 
03.07.19
✎
15:24
если хронологический порядок ПТУ в запросе не соблюдается, зачем пользаку такие данные?
25 sqr4
 
03.07.19
✎
15:27
(23) 32х-летний петушок... Я постоянно разочаровываюсь, когда вижу такое поведение у взрослых мужиков.
(24) В приведенном мной запросе как раз выведутся последние данные по дате, а вот брать максимум по ссылке, это да, умный ход
26 novichok79
 
03.07.19
✎
15:29
(25) ааххаха, ок, давай по-твоему. петух твой батя.
(25) ага, я то на реальных данных посмотрел. но если тебе хочется спорить, то делай это наздоровье.
27 sqr4
 
03.07.19
✎
15:33
(26) я вот этого (23) не писал, это написал ты, отсюда и вывод из (25) На чем основам твой вывод.
А это так для общего тебе развития, может перестанешь людей оскарблять http://catalog.mista.ru/public/635159/
28 ptiz
 
03.07.19
✎
15:36
Как пример (но это если товар встречался по 1 разу в накладной):

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

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

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

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

УПОРЯДОЧИТЬ ПО
    Контрагент,
    Дата
АВТОУПОРЯДОЧИВАНИЕ
42 novichok79
 
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

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