Sample Header Ad - 728x90

Correlated subqueries. Count Visits after Last Purchase Date

2 votes
1 answer
765 views
I'm pretty new to SQL and have been trying to solve this task for a while...still no luck. I would appreciate if someone here could help me out. I have a database with columns: - ClientID - VisitID - Date - PurchaseID (array) - etc. What I'm trying to achieve is to retrieve a list containing the following data: - ClientID - Last Visit Date - First Visit Date - Last Purchase Date - Visits Count - Purchases Count - Visits After Last Purchase Count When trying to retrieve a value for Visits After Last Purchase Count this is where I am stuck. SELECT ClientID, FirstVisit, LastVisit, LastPurchaseDate, Visits, Purchases, VisitsAfterPurchase FROM ( SELECT h.ClientID, max(h.Date) AS LastVisit, min(h.Date) AS FirstVisit, count(VisitID) AS Visits FROM s7_visits AS h WHERE Date > '2017-12-01' GROUP BY h.ClientID LIMIT 100 ) ANY LEFT JOIN ( SELECT d.ClientID, max(d.Date) AS LastPurchaseDate, sum(length(d.PurchaseID)) AS Purchases, sum( ( SELECT count(x.VisitID) FROM s7_visits AS x WHERE x.ClientID = d.ClientID HAVING x.Date >= max(d.Date) )) AS VisitsAfterPurchase FROM s7_visits AS d WHERE (length(PurchaseID) > 0) AND (Date > '2017-12-01') GROUP BY d.ClientID ) USING (ClientID) The database system I'm using is Yandex ClickHouse . The USING syntax is absolutely normal for ClickHouse. It is used instead of ON clause in other RDBMSs. This query is giving me the following error: > DB::Exception: Column Date is not under aggregate function and not in GROUP BY.. Sample Data: +----------+---------+------------+------------+ | CliendID | VisitID | Date | PurchaseID | +----------+---------+------------+------------+ | 123 | 136 | 01.12.2017 | | | 123 | 522 | 05.12.2017 | | | 123 | 883 | 08.12.2017 | | | 123 | 293 | 09.12.2017 | ['345'] | | 123 | 278 | 12.12.2017 | | | 123 | 508 | 12.12.2017 | | | 123 | 562 | 15.12.2017 | | | 123 | 523 | 21.12.2017 | | | 456 | 736 | 29.11.2017 | | | 456 | 417 | 03.12.2017 | | | 456 | 950 | 04.12.2017 | | | 456 | 532 | 05.12.2017 | ['346'] | | 456 | 880 | 09.12.2017 | | | 456 | 296 | 12.12.2017 | | | 456 | 614 | 15.12.2017 | | +----------+---------+------------+------------+ And the result should be: +----------+-----------------+------------------+--------------------+--------------+-----------------+----------------------------------+ | ClientID | Last Visit Date | First Visit Date | Last Purchase Date | Visits Count | Purchases Count | Visits After Last Purchase Count | +----------+-----------------+------------------+--------------------+--------------+-----------------+----------------------------------+ | 123 | 21.12.2017 | 01.12.2017 | 09.12.2017 | 8 | 1 | 4 | | 456 | 15.12.2017 | 29.11.2017 | 05.12.2017 | 7 | 1 | 3 | +----------+-----------------+------------------+--------------------+--------------+-----------------+----------------------------------+
Asked by Edgard Gomez Sennovskaya (21 rep)
Dec 25, 2017, 07:40 PM
Last activity: Apr 24, 2025, 06:02 AM