Skip to content

Instantly share code, notes, and snippets.

@lesssummer
Forked from hidayat365/grouping.sql
Created October 6, 2017 00:59
Show Gist options
  • Select an option

  • Save lesssummer/59236a826dbb601134bb6bfe478b58bd to your computer and use it in GitHub Desktop.

Select an option

Save lesssummer/59236a826dbb601134bb6bfe478b58bd to your computer and use it in GitHub Desktop.
Grouping by transactions using custom group
-- ---------------------------------------
-- Generate Data
-- ---------------------------------------
CREATE table trans_history AS
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:00:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:10:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:20:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:30:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:40:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 08:50:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 09:00:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 09:10:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 09:20:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 09:30:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 09:40:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 09:50:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 10:00:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 10:10:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 10:20:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 10:30:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 10:40:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 10:50:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 11:00:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 11:10:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 11:20:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 11:30:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 11:40:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 11:50:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 12:00:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 12:10:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 12:20:00' AS history UNION ALL
SELECT 'TRANS-C' AS transactions, '2017-08-30 12:30:00' AS history UNION ALL
SELECT 'TRANS-B' AS transactions, '2017-08-30 12:40:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 12:50:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:00:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:10:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:20:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:30:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:40:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 13:50:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 14:00:00' AS history UNION ALL
SELECT 'TRANS-A' AS transactions, '2017-08-30 14:10:00' AS history UNION ALL
SELECT 'TRANS-D' AS transactions, '2017-08-30 14:20:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-08-30 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-08-31 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-01 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-02 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-03 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-04 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-05 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-06 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-07 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-08 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-09 14:30:00' AS history UNION ALL
SELECT 'TRANS-E' AS transactions, '2017-09-10 14:30:00' AS history ;
-- ---------------------------------------
-- Query Data
-- Result: please see comment
-- ---------------------------------------
select min(transactions) transactions
, min(history) awal, max(history) akhir, count(history) jml_data
from (
select d1.transactions, d1.history
, @baris3 := @baris3 + case when d1.transactions = d2.transactions then 0 else 1 end grp
from (
select transactions, history
, @baris1:=@baris1+1 baris
from trans_history
join (select @baris1:=0) t1
order by history
) d1
left join (
select transactions, history
, @baris2:=@baris2+1 baris
from trans_history
join (select @baris2:=1) t2
order by history
) d2
on d1.baris = d2.baris
join (select @baris3:=0) t3
order by d1.history, d1.transactions
) d3
group by grp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment