Ускорение запроса Sql с помощью CROSS APPLY (), исключая ROW_NUMBER ()

Я не думаю, что есть один, и это похоже на большой недостаток. Это определенно не упоминается в части объекта схемы спецификации . Они вызывают элементы, которые были приняты из схемы JSON, и anyOf не входит в их число:

Следующие свойства берутся непосредственно из определения схемы JSON и следуют тем же спецификациям :

  • $ ref - как формат JSON Reference
  • (подробности см. в Формах типа данных)
  • title
  • описание (синтаксис GFM может использоваться для расширенного текстового представления)
  • по умолчанию (в отличие от схемы JSON, значение ДОЛЖНО соответствовать определенному типу для объекта схемы)
  • multipleOf
  • максимальный
  • эксклюзивныйMaximum
  • минимальный
  • эксклюзивныйMinimum
  • maxLength
  • minLength
  • ] pattern
  • maxItems
  • minItems
  • uniqueItems
  • maxProperties
  • minProperties
  • требуется
  • enum
  • type

Следующие свойства взяты из определения схемы JSON, но их определения были скорректированы на Sw Спецификация agger. Их определение такое же, как и у схемы JSON, только там, где исходное определение ссылается на определение схемы JSON, вместо этого используется определение объекта схемы.

  • items
  • allOf
  • свойства
  • дополнительные свойства
blockquote>

Я думаю, что самое близкое поле discriminator, но это означает, что у вас есть для структурирования вашего вывода для размещения Swagger.

2
задан Brent 15 January 2019 в 19:05
поделиться

1 ответ

Я не уверен, но кросс-аппликации можно избежать, если я пойму, что ты делаешь. и это поможет с производительностью, но, поскольку у меня нет доступа к данным, вы должны проверить их и посмотреть.

, поэтому я начну после того, как вы поместите данные во временную таблицу. попробуйте следующее: -

 ;with TempWithSum as (
 --get the sum partition by string_groupby, int_booking_year
  select *,sum(float_total) over(partition by string_groupby, int_booking_year) as float_sum_total
  from @temp_00
 ),NamesCat as(
  --get all customer names grouped by string_groupby
  select string_groupby, STRING_AGG(cast(string_customer_tpi as varchar(max)), '|') as string_tpis_concat
  from @temp_00
  group by string_groupby
 ),AllData as(
 --get the row number partition string_groupby and ordered by string_groupby, float_sum_total
  select string_customer_name, string_customer_region, string_industry_group, string_city, z.string_state,
         string_country, string_booking_type, string_sales_branch, string_sales_region, string_sales_area,
         int_booking_year, float_sum_total, string_tpis_concat, string_groupby
        ,ROW_NUMBER() over (partition by string_groupby order by string_groupby, float_sum_total) as row_num
    from TempWithSum z
    inner join NamesCat on NamesCat.string_groupby=TempWithSum.string_groupby
  )
  select * from AllData where row_num=1

Надеюсь, что это сработает и даст нужный вам результат в ожидаемые вами сроки.

Примечание: я знаю, что вы хотели исключить номер строки, и я предлагаю исключить перекрестное применение, но ваша цель - производительность.

0
ответ дан Ali Al-Mosawi 15 January 2019 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: