Advertisement
mess9

Untitled

Oct 19th, 2020 (edited)
1,963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.67 KB | None | 0 0
  1. -- набор данных в метод /client/bills
  2. -- нужно получить такой nls у которого будет
  3. -- начислений > 3
  4. -- начислений с уникальными датами > 3
  5. -- начислений с уникальными сервис провайдерами > 2
  6. SELECT nls, num_bills, uniq_bill_date, uniq_serv_prov FROM (
  7.     SELECT ---- получаем некоторое количество клиентов у которых num_bills начислений
  8.         c.nls,  
  9.         c.LOCALSYSTEMID ,
  10.         b.LOCALSYSTEMID ,
  11.         b.BILLINGDATE ,
  12.         ROW_NUMBER () OVER (PARTITION BY b.CLIENT_LOCALSYSTEMID ORDER BY b.LOCALSYSTEMID) NUM_BILLS, -- всего счетов на клиенте
  13. --        ROW_NUMBER () OVER (PARTITION BY b.CLIENT_LOCALSYSTEMID ORDER BY b.BILLINGDATE) NUM_BILLS_DATE, -- всего дат счетов на клиенте
  14.         (              -- всего уникальных дат счетов на клиенте
  15.         SELECT COUNT(BILLINGDATE) AS num_uniq_date FROM (
  16.         SELECT DISTINCT
  17.             b.BILLINGDATE
  18.         FROM
  19.             DWH6.BILLS b
  20.         WHERE 1=1
  21.             AND b.CLIENT_APP_PKID = 9 -- апппкид указывается 2 раза. тут
  22.             AND b.CLIENT_VERSION = 0
  23.             AND b.CLIENT_LOCALSYSTEMID = c.LOCALSYSTEMID
  24.             )
  25.         ) AS uniq_bill_date,
  26.         (            -- всего уникальных сервис провайдеров счетов на клиенте
  27.         SELECT COUNT(SERVICEPROVIDER_LOCALSYSTEMID) AS num_uniq_serv_prov FROM (
  28.         SELECT DISTINCT
  29.             b.SERVICEPROVIDER_LOCALSYSTEMID
  30.         FROM
  31.             DWH6.BILLS b
  32.         WHERE 1=1
  33.             AND b.CLIENT_APP_PKID = 9
  34.             AND b.CLIENT_VERSION = 0
  35.             AND b.CLIENT_LOCALSYSTEMID = c.LOCALSYSTEMID
  36.             )
  37.         ) AS uniq_serv_prov
  38.     FROM
  39.         mdm6.CLIENT sample(0.5) c -- sample speed magic (для теста(0.5) и (пре)прода(0.0005) нужны разные значения)
  40.         INNER JOIN DWH6.BILLS b     -- подбирать значения sample нужно эмпирически. дабы и данные нашлись, и время запроса было адекватным
  41.             ON c.LOCALSYSTEMID = b.CLIENT_LOCALSYSTEMID
  42.             AND c.APP_PKID = b.CLIENT_APP_PKID
  43.             AND c.VERSION = b.CLIENT_VERSION
  44.     WHERE 1=1
  45.         AND c.VERSION = 0
  46.         AND c.DELETED = 0
  47.         AND c.ENDDATE > SYSDATE
  48.         AND REGEXP_LIKE(c.nls, '\d{12}')
  49.         AND c.APP_PKID = 9 -- и тут
  50.     ORDER BY NUM_BILLS DESC
  51.     ) WHERE 1=1
  52.     AND uniq_bill_date > 3
  53.     AND num_bills > 3
  54.     AND uniq_serv_prov > 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement