Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

ALTER TABLE Transactions

ADD COLUMN Streak INT UNSIGNED NOT NULL DEFAULT 0;

UPDATE Transactions
SET Streak =
(SELECT COUNT(*)
FROM (SELECT T1.TxnId
FROM Transactions T1
WHERE T1.MerchantId = Transactions.MerchantId
AND T1.Date >= CURDATE() - INTERVAL n DAY
AND T1.Date <= CURDATE()
ORDER BY T1.Date DESC) As T2);

-----------------------------------------------------------------------------------
---------------------------------------
SET longest_streak = (SELECT MAX(streak)
FROM (SELECT DISTINCT t2.merchantid, (SUM(CASE WHEN
t2.amount > t.amount THEN 1 ELSE 0 END) + 1) as streak
FROM transactions t2
WHERE t2.date >= CURDATE() - INTERVAL 7 DAY
AND t2.date <= CURDATE()
AND t2.merchantid = t.merchantid
GROUP BY t2.merchantid
HAVING COUNT(*) > (SELECT AVG(COUNT(*))
FROM transactions
WHERE date >= CURDATE() - INTERVAL
7 DAY
AND date <= CURDATE()
AND merchantid = t.merchantid))
FROM transactions t;

-----------------------------------------------------------------------------------
---------------------------------------

SELECT TxnId, MerchantId, Amount, Date,


CASE WHEN COUNT(*) OVER (PARTITION BY MerchantId ORDER BY Date ROWS BETWEEN 6
PRECEDING AND CURRENT ROW) > SUM(COUNT(*)) OVER (PARTITION BY MerchantId ORDER BY
Date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)/7
THEN COUNT(*) OVER (PARTITION BY MerchantId ORDER BY Date ROWS BETWEEN 6 PRECEDING
AND CURRENT ROW)
ELSE 0 END AS Streak
FROM Transactions
ORDER BY Date DESC;

-----------------------------------------------------------------------------------
------------------------------------------------------------------
Selecting Max streak and streak calculation.

(SELECT MAX(streak) FROM (SELECT DISTINCT merchantid, (SUM(CASE WHEN


count(rrn+txn_id) > (median_count) THEN 1 ELSE 0 END) + 1) as streak
FROM transactions.

Calculating median_count

SELECT
MerchantId,
COUNT(TxnId+RRN) as Transaction_Count,
PERCENTILE_DISC (0.5) WITHIN GROUP (ORDER BY Date DESC) OVER (PARTITION BY
MerchantId) as Median_Transaction_Count
FROM
Transactions
WHERE
Date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) and date not in CURRENT_DATE()

GROUP BY
MerchantId;
-----------------------------------------------------------------------------------
---------------------------------

SELECT
CAST(PERCENTILE_CONT(0.5) WITHIN GROUP
(ORDER BY COUNT(TxnId))
OVER (PARTITION BY MerchantId
ORDER BY Date DESC ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
AS MEDIAN_TRANSACTION_COUNT
FROM Transactions
WHERE Date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY MerchantId, Date;
-----------------------------------------------------------------------------------
-------------------------------
Yesterday:
SELECT DATEADD(day, -1, CAST(GETDATE() AS date)) AS YesterdayDate;
-----------------------------------------------------------------------------------
----------------------
Date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)

You might also like