Advertisement
volday

Изм-е ROPO транз- по дням с 010519-310519 с конверс-м окном

Sep 17th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.22 KB | None | 0 0
  1. #standardSQL
  2. --Изменение ROPO транзакций по дням с 1 мая 2019 по 31 мая 2019 с конверсионным окном 2 недели
  3. SELECT
  4.             metric_online_only, --количество транзакций ONLINE
  5.             metric_offline_only, --количество транзакций OFFLINE
  6.             metric_ropo, --количество транзакций ROPO
  7.     DATE
  8.  
  9. FROM
  10. (
  11.     SELECT
  12.         DATE,
  13.  
  14.            
  15.         transactions_count_online_only AS metric_online_only,
  16.         transactions_count_offline_only AS metric_offline_only,
  17.         transactions_count_ropo AS metric_ropo
  18.  
  19.         ,
  20.         transactions_count_online_only_summary AS metric_online_only_summary,
  21.         transactions_count_offline_only_summary AS metric_offline_only_summary,
  22.         transactions_count_ropo_summary AS metric_ropo_summary
  23.  
  24.     FROM
  25.     (
  26.         SELECT
  27.             DATE,
  28.  
  29.                     transactions_count_online_only,
  30.     transactions_count_offline_only,
  31.     transactions_count_ropo
  32.     ,
  33.         transactions_count_online_only + transactions_count_offline_only + transactions_count_ropo AS transactions_count_total,
  34.     SUM(transactions_count_online_only) OVER() AS transactions_count_online_only_summary,
  35.     SUM(transactions_count_offline_only) OVER() AS transactions_count_offline_only_summary,
  36.     SUM(transactions_count_ropo) OVER() AS transactions_count_ropo_summary
  37.  
  38.         FROM
  39.         (
  40.             SELECT
  41.                 DATE(TIME) AS DATE,
  42.  
  43.                                 SUM(IF(l_transaction_id IS NOT NULL AND transaction_id IS NOT NULL, 1, 0)) AS transactions_count_online_only,
  44.             SUM(IF(l_transaction_id IS NULL AND transaction_id IS NOT NULL AND prevSessionTime IS NULL, 1, 0)) AS transactions_count_offline_only,
  45.             SUM(IF(l_transaction_id IS NULL AND transaction_id IS NOT NULL AND prevSessionTime IS NOT NULL, 1, 0)) AS transactions_count_ropo
  46.  
  47.             FROM
  48.             (
  49.                 SELECT
  50.                     FIRST_VALUE(sessionTime IGNORE NULLS) OVER(PARTITION BY user_id ORDER BY sessionTimeInSeconds RANGE BETWEEN 1209600 PRECEDING AND CURRENT ROW) AS prevSessionTime,
  51.                     TIME,
  52.                     transaction_id,
  53.                     transaction_created,
  54.                     transaction_revenue,
  55.                     l_transaction_id,
  56.                     user_id
  57.                 FROM
  58.                 (
  59.                     SELECT
  60.                         l.sessionId AS sessionId,
  61.                         UNIX_SECONDS(COALESCE(l.sessionTime, r.transaction_created)) AS sessionTimeInSeconds,
  62.                         COALESCE(l.sessionTime, r.transaction_created) AS TIME,
  63.                         l.sessionTime AS sessionTime,
  64.                         r.transaction_created AS transaction_created,
  65.                         l.transaction_id AS l_transaction_id,
  66.                         r.transaction_id AS transaction_id,
  67.                         COALESCE(l.transaction_revenue , r.transaction_revenue) AS transaction_revenue,
  68.                         COALESCE(r.user_id, l.user_id, l.prev_user_id, l.next_user_id, l.client_id) AS user_id
  69.                     FROM
  70.                     (
  71.                         SELECT
  72.     *,
  73.     FIRST_VALUE(user_id IGNORE NULLS) OVER(
  74.         PARTITION BY client_id
  75.         ORDER BY sessionTime DESC
  76.         ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
  77.     ) AS prev_user_id,
  78.     FIRST_VALUE(user_id IGNORE NULLS) OVER(
  79.         PARTITION BY client_id
  80.         ORDER BY sessionTime DESC
  81.         ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
  82.     ) AS next_user_id
  83.                         FROM (
  84.                             SELECT
  85.                                 hits.TRANSACTION.transactionId AS transaction_id,
  86.                                 MAX(IF(USER.id IS NULL OR REGEXP_CONTAINS(USER.id, '^$|not set|undefined|^0$|(not set)|false|none'), NULL, USER.id)) AS user_id,
  87.                                 MAX(clientId) AS client_id,
  88.                                 sessionId AS sessionId,
  89.                                 SUM(IF(hits.eCommerceAction.action_type='refund' AND hits.TRANSACTION.transactionRevenue > 0, -hits.TRANSACTION.transactionRevenue, hits.TRANSACTION.transactionRevenue)) AS transaction_revenue,
  90.                                 TIMESTAMP_SECONDS(MIN(hits.TIME)) AS sessionTime
  91.                             FROM
  92.                                 `owox-140513.OWOXBI_Streaming.session_streaming_*`, unnest(hits) AS hits
  93.                             WHERE
  94.                                 _TABLE_SUFFIX BETWEEN FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP('2019-05-01')), INTERVAL -2 WEEK))) AND FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP_ADD(TIMESTAMP_ADD(TIMESTAMP_TRUNC(TIMESTAMP('2019-05-31'), DAY), INTERVAL 1 DAY), INTERVAL -1 SECOND))
  95.                             GROUP BY
  96.                               sessionId,
  97.                               transaction_id
  98.                         )
  99.                     ) AS l
  100.                     FULL OUTER JOIN
  101.                     (
  102.                         SELECT
  103.                             transaction_id,
  104.                             SUM(product_price * product_quantity) AS transaction_revenue,
  105.                             user_id AS user_id,
  106.                             MIN(TIME) AS transaction_created
  107.                         FROM
  108.                             `owox-140513.1c.view_snapshot_completed_orders_view`
  109.                         WHERE
  110.                             TIME BETWEEN TIMESTAMP(DATETIME_ADD(DATETIME(TIMESTAMP('2019-05-01')), INTERVAL -2 WEEK)) AND TIMESTAMP_ADD(TIMESTAMP_ADD(TIMESTAMP_TRUNC(TIMESTAMP('2019-05-31'), DAY), INTERVAL 1 DAY), INTERVAL -1 SECOND)
  111.                         GROUP BY
  112.                           transaction_id,
  113.                           user_id
  114.                     ) AS r
  115.                     ON l.transaction_id = r.transaction_id
  116.                 )
  117.             )
  118.             WHERE TIME BETWEEN TIMESTAMP('2019-05-01') AND TIMESTAMP_ADD(TIMESTAMP_ADD(TIMESTAMP_TRUNC(TIMESTAMP('2019-05-31'), DAY), INTERVAL 1 DAY), INTERVAL -1 SECOND)
  119.             GROUP BY
  120.                 DATE
  121.         )
  122.         WHERE DATE IS NOT NULL
  123.     )
  124. )
  125.  
  126.         ORDER BY DATE DESC
  127.         LIMIT 2500
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement