Spaces:
Running
Running
SQL playground on DuckDB WASM: in-browser warehouse + 55 tested templates
Browse files- README.md +24 -6
- data/customers.csv +1001 -0
- data/order_items.csv +0 -0
- data/orders.csv +0 -0
- data/products.csv +101 -0
- index.html +291 -18
- templates.json +1 -0
README.md
CHANGED
|
@@ -1,10 +1,28 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
| 7 |
-
pinned:
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: SQL Query Playground
|
| 3 |
+
emoji: 🦆
|
| 4 |
+
colorFrom: indigo
|
| 5 |
+
colorTo: gray
|
| 6 |
sdk: static
|
| 7 |
+
pinned: true
|
| 8 |
+
license: mit
|
| 9 |
+
short_description: Real SQL against DuckDB WASM — runs in your browser
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# SQL Query Playground
|
| 13 |
+
|
| 14 |
+
Write and run **real SQL against a seeded warehouse** — DuckDB compiled to
|
| 15 |
+
WebAssembly, executed entirely in your browser. Nothing is uploaded, no server
|
| 16 |
+
exists: the database, the engine and the results all live on your machine.
|
| 17 |
+
|
| 18 |
+
- **55 tested templates** — window functions, cohort queries, funnel metrics,
|
| 19 |
+
date arithmetic — every template is also executed in CI against the same data.
|
| 20 |
+
- Schema browser for the four-table warehouse (1,000 customers, 5,000 orders,
|
| 21 |
+
12,663 line items), seeded deterministically.
|
| 22 |
+
- Ctrl+Enter to run; query timing and row counts shown on every execution.
|
| 23 |
+
|
| 24 |
+
Not a simulation: every query is parsed, typed and executed by a real DuckDB
|
| 25 |
+
engine. Errors surface as data — the way production pipelines treat failures.
|
| 26 |
+
|
| 27 |
+
- Code + template library: [sql-query-builder on GitHub](https://github.com/Reaver1000/sql-query-builder)
|
| 28 |
+
- Built by [David Buchan](https://reaver1000.github.io) — AI, automation and data work
|
data/customers.csv
ADDED
|
@@ -0,0 +1,1001 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
customer_id,email,name,country,created_at,segment
|
| 2 |
+
1,customer1@example.com,Customer 1,France,2024-02-20,Basic
|
| 3 |
+
2,customer2@example.com,Customer 2,USA,2024-12-17,Standard
|
| 4 |
+
3,customer3@example.com,Customer 3,USA,2024-07-07,Basic
|
| 5 |
+
4,customer4@example.com,Customer 4,USA,2024-10-05,Basic
|
| 6 |
+
5,customer5@example.com,Customer 5,Canada,2024-11-26,Premium
|
| 7 |
+
6,customer6@example.com,Customer 6,Canada,2024-07-02,Basic
|
| 8 |
+
7,customer7@example.com,Customer 7,Japan,2024-02-01,Standard
|
| 9 |
+
8,customer8@example.com,Customer 8,USA,2024-07-22,Basic
|
| 10 |
+
9,customer9@example.com,Customer 9,UK,2024-05-21,Standard
|
| 11 |
+
10,customer10@example.com,Customer 10,USA,2024-04-07,Basic
|
| 12 |
+
11,customer11@example.com,Customer 11,USA,2024-03-03,Basic
|
| 13 |
+
12,customer12@example.com,Customer 12,Germany,2024-08-20,Standard
|
| 14 |
+
13,customer13@example.com,Customer 13,USA,2024-02-16,Standard
|
| 15 |
+
14,customer14@example.com,Customer 14,USA,2024-12-05,Standard
|
| 16 |
+
15,customer15@example.com,Customer 15,France,2024-04-18,Premium
|
| 17 |
+
16,customer16@example.com,Customer 16,Germany,2024-11-24,Premium
|
| 18 |
+
17,customer17@example.com,Customer 17,USA,2024-11-23,Standard
|
| 19 |
+
18,customer18@example.com,Customer 18,France,2024-11-01,Standard
|
| 20 |
+
19,customer19@example.com,Customer 19,Australia,2024-01-11,Standard
|
| 21 |
+
20,customer20@example.com,Customer 20,USA,2024-01-26,Standard
|
| 22 |
+
21,customer21@example.com,Customer 21,Australia,2024-06-19,Standard
|
| 23 |
+
22,customer22@example.com,Customer 22,Canada,2024-05-04,Standard
|
| 24 |
+
23,customer23@example.com,Customer 23,UK,2024-03-05,Standard
|
| 25 |
+
24,customer24@example.com,Customer 24,USA,2024-10-16,Standard
|
| 26 |
+
25,customer25@example.com,Customer 25,Brazil,2024-04-15,Basic
|
| 27 |
+
26,customer26@example.com,Customer 26,UK,2024-02-05,Basic
|
| 28 |
+
27,customer27@example.com,Customer 27,USA,2024-10-10,Standard
|
| 29 |
+
28,customer28@example.com,Customer 28,USA,2024-04-16,Standard
|
| 30 |
+
29,customer29@example.com,Customer 29,Japan,2024-10-27,Basic
|
| 31 |
+
30,customer30@example.com,Customer 30,France,2024-04-20,Standard
|
| 32 |
+
31,customer31@example.com,Customer 31,Australia,2024-04-29,Basic
|
| 33 |
+
32,customer32@example.com,Customer 32,Canada,2024-06-17,Standard
|
| 34 |
+
33,customer33@example.com,Customer 33,Germany,2024-03-16,Basic
|
| 35 |
+
34,customer34@example.com,Customer 34,Brazil,2024-11-01,Standard
|
| 36 |
+
35,customer35@example.com,Customer 35,UK,2024-01-02,Basic
|
| 37 |
+
36,customer36@example.com,Customer 36,Germany,2024-05-21,Basic
|
| 38 |
+
37,customer37@example.com,Customer 37,Australia,2024-03-15,Standard
|
| 39 |
+
38,customer38@example.com,Customer 38,France,2024-03-07,Basic
|
| 40 |
+
39,customer39@example.com,Customer 39,Japan,2024-10-03,Basic
|
| 41 |
+
40,customer40@example.com,Customer 40,France,2024-05-08,Basic
|
| 42 |
+
41,customer41@example.com,Customer 41,Canada,2024-03-30,Premium
|
| 43 |
+
42,customer42@example.com,Customer 42,USA,2024-02-26,Standard
|
| 44 |
+
43,customer43@example.com,Customer 43,USA,2024-12-04,Basic
|
| 45 |
+
44,customer44@example.com,Customer 44,USA,2024-01-14,Basic
|
| 46 |
+
45,customer45@example.com,Customer 45,USA,2024-03-08,Basic
|
| 47 |
+
46,customer46@example.com,Customer 46,USA,2024-01-08,Standard
|
| 48 |
+
47,customer47@example.com,Customer 47,USA,2024-07-02,Basic
|
| 49 |
+
48,customer48@example.com,Customer 48,USA,2024-05-01,Standard
|
| 50 |
+
49,customer49@example.com,Customer 49,France,2024-10-28,Standard
|
| 51 |
+
50,customer50@example.com,Customer 50,UK,2024-06-14,Standard
|
| 52 |
+
51,customer51@example.com,Customer 51,UK,2024-01-09,Standard
|
| 53 |
+
52,customer52@example.com,Customer 52,USA,2024-03-30,Basic
|
| 54 |
+
53,customer53@example.com,Customer 53,USA,2024-05-15,Premium
|
| 55 |
+
54,customer54@example.com,Customer 54,Brazil,2024-01-27,Basic
|
| 56 |
+
55,customer55@example.com,Customer 55,France,2024-03-05,Premium
|
| 57 |
+
56,customer56@example.com,Customer 56,France,2024-08-03,Basic
|
| 58 |
+
57,customer57@example.com,Customer 57,USA,2024-09-26,Premium
|
| 59 |
+
58,customer58@example.com,Customer 58,Canada,2024-02-28,Premium
|
| 60 |
+
59,customer59@example.com,Customer 59,USA,2024-02-02,Standard
|
| 61 |
+
60,customer60@example.com,Customer 60,UK,2024-08-31,Standard
|
| 62 |
+
61,customer61@example.com,Customer 61,Brazil,2024-08-17,Basic
|
| 63 |
+
62,customer62@example.com,Customer 62,France,2024-07-04,Standard
|
| 64 |
+
63,customer63@example.com,Customer 63,Germany,2024-09-19,Basic
|
| 65 |
+
64,customer64@example.com,Customer 64,Canada,2024-10-30,Basic
|
| 66 |
+
65,customer65@example.com,Customer 65,Japan,2024-02-25,Basic
|
| 67 |
+
66,customer66@example.com,Customer 66,Australia,2024-08-19,Basic
|
| 68 |
+
67,customer67@example.com,Customer 67,USA,2024-09-14,Premium
|
| 69 |
+
68,customer68@example.com,Customer 68,USA,2024-04-23,Premium
|
| 70 |
+
69,customer69@example.com,Customer 69,UK,2024-11-10,Standard
|
| 71 |
+
70,customer70@example.com,Customer 70,USA,2024-01-23,Standard
|
| 72 |
+
71,customer71@example.com,Customer 71,USA,2024-12-03,Basic
|
| 73 |
+
72,customer72@example.com,Customer 72,Brazil,2024-09-23,Standard
|
| 74 |
+
73,customer73@example.com,Customer 73,Japan,2024-06-03,Standard
|
| 75 |
+
74,customer74@example.com,Customer 74,UK,2024-08-22,Standard
|
| 76 |
+
75,customer75@example.com,Customer 75,France,2024-11-25,Basic
|
| 77 |
+
76,customer76@example.com,Customer 76,UK,2024-01-16,Standard
|
| 78 |
+
77,customer77@example.com,Customer 77,Brazil,2024-02-01,Standard
|
| 79 |
+
78,customer78@example.com,Customer 78,Germany,2024-09-02,Basic
|
| 80 |
+
79,customer79@example.com,Customer 79,USA,2024-07-24,Basic
|
| 81 |
+
80,customer80@example.com,Customer 80,USA,2024-08-06,Standard
|
| 82 |
+
81,customer81@example.com,Customer 81,Germany,2024-12-17,Basic
|
| 83 |
+
82,customer82@example.com,Customer 82,USA,2024-02-25,Standard
|
| 84 |
+
83,customer83@example.com,Customer 83,France,2024-09-08,Standard
|
| 85 |
+
84,customer84@example.com,Customer 84,Japan,2024-12-30,Standard
|
| 86 |
+
85,customer85@example.com,Customer 85,UK,2024-08-15,Standard
|
| 87 |
+
86,customer86@example.com,Customer 86,USA,2024-02-07,Standard
|
| 88 |
+
87,customer87@example.com,Customer 87,Brazil,2024-02-11,Basic
|
| 89 |
+
88,customer88@example.com,Customer 88,Germany,2024-06-13,Standard
|
| 90 |
+
89,customer89@example.com,Customer 89,USA,2024-11-07,Standard
|
| 91 |
+
90,customer90@example.com,Customer 90,USA,2024-03-16,Standard
|
| 92 |
+
91,customer91@example.com,Customer 91,USA,2024-02-03,Basic
|
| 93 |
+
92,customer92@example.com,Customer 92,France,2024-03-05,Standard
|
| 94 |
+
93,customer93@example.com,Customer 93,Australia,2024-05-20,Standard
|
| 95 |
+
94,customer94@example.com,Customer 94,UK,2024-11-15,Basic
|
| 96 |
+
95,customer95@example.com,Customer 95,USA,2024-11-20,Basic
|
| 97 |
+
96,customer96@example.com,Customer 96,UK,2024-10-26,Standard
|
| 98 |
+
97,customer97@example.com,Customer 97,Brazil,2024-10-07,Premium
|
| 99 |
+
98,customer98@example.com,Customer 98,Germany,2024-12-30,Basic
|
| 100 |
+
99,customer99@example.com,Customer 99,Brazil,2024-06-15,Standard
|
| 101 |
+
100,customer100@example.com,Customer 100,Japan,2024-07-14,Basic
|
| 102 |
+
101,customer101@example.com,Customer 101,USA,2024-11-01,Basic
|
| 103 |
+
102,customer102@example.com,Customer 102,Canada,2024-09-28,Basic
|
| 104 |
+
103,customer103@example.com,Customer 103,Canada,2024-05-30,Basic
|
| 105 |
+
104,customer104@example.com,Customer 104,Germany,2024-08-20,Standard
|
| 106 |
+
105,customer105@example.com,Customer 105,USA,2024-09-15,Standard
|
| 107 |
+
106,customer106@example.com,Customer 106,France,2024-11-05,Basic
|
| 108 |
+
107,customer107@example.com,Customer 107,USA,2024-08-08,Standard
|
| 109 |
+
108,customer108@example.com,Customer 108,UK,2024-02-20,Standard
|
| 110 |
+
109,customer109@example.com,Customer 109,Germany,2024-12-25,Standard
|
| 111 |
+
110,customer110@example.com,Customer 110,Brazil,2024-02-28,Standard
|
| 112 |
+
111,customer111@example.com,Customer 111,Japan,2024-12-01,Standard
|
| 113 |
+
112,customer112@example.com,Customer 112,USA,2024-11-29,Standard
|
| 114 |
+
113,customer113@example.com,Customer 113,Germany,2024-10-09,Basic
|
| 115 |
+
114,customer114@example.com,Customer 114,USA,2024-04-20,Basic
|
| 116 |
+
115,customer115@example.com,Customer 115,Brazil,2024-08-08,Premium
|
| 117 |
+
116,customer116@example.com,Customer 116,Japan,2024-08-19,Standard
|
| 118 |
+
117,customer117@example.com,Customer 117,USA,2024-04-26,Standard
|
| 119 |
+
118,customer118@example.com,Customer 118,France,2024-07-30,Standard
|
| 120 |
+
119,customer119@example.com,Customer 119,France,2024-06-22,Basic
|
| 121 |
+
120,customer120@example.com,Customer 120,USA,2024-08-20,Standard
|
| 122 |
+
121,customer121@example.com,Customer 121,Australia,2024-07-23,Standard
|
| 123 |
+
122,customer122@example.com,Customer 122,Germany,2024-07-31,Premium
|
| 124 |
+
123,customer123@example.com,Customer 123,Australia,2024-02-18,Standard
|
| 125 |
+
124,customer124@example.com,Customer 124,Germany,2024-06-09,Basic
|
| 126 |
+
125,customer125@example.com,Customer 125,USA,2024-08-06,Premium
|
| 127 |
+
126,customer126@example.com,Customer 126,UK,2024-06-09,Basic
|
| 128 |
+
127,customer127@example.com,Customer 127,USA,2024-12-06,Premium
|
| 129 |
+
128,customer128@example.com,Customer 128,Brazil,2024-05-10,Standard
|
| 130 |
+
129,customer129@example.com,Customer 129,Japan,2024-07-10,Basic
|
| 131 |
+
130,customer130@example.com,Customer 130,Japan,2024-03-19,Standard
|
| 132 |
+
131,customer131@example.com,Customer 131,UK,2024-12-17,Basic
|
| 133 |
+
132,customer132@example.com,Customer 132,USA,2024-08-30,Basic
|
| 134 |
+
133,customer133@example.com,Customer 133,Japan,2024-02-04,Standard
|
| 135 |
+
134,customer134@example.com,Customer 134,Brazil,2024-02-16,Standard
|
| 136 |
+
135,customer135@example.com,Customer 135,USA,2024-02-13,Basic
|
| 137 |
+
136,customer136@example.com,Customer 136,Germany,2024-02-17,Standard
|
| 138 |
+
137,customer137@example.com,Customer 137,USA,2024-08-09,Standard
|
| 139 |
+
138,customer138@example.com,Customer 138,Australia,2024-02-19,Basic
|
| 140 |
+
139,customer139@example.com,Customer 139,Australia,2024-07-09,Premium
|
| 141 |
+
140,customer140@example.com,Customer 140,USA,2024-03-07,Standard
|
| 142 |
+
141,customer141@example.com,Customer 141,Germany,2024-10-11,Standard
|
| 143 |
+
142,customer142@example.com,Customer 142,Germany,2024-01-31,Basic
|
| 144 |
+
143,customer143@example.com,Customer 143,USA,2024-10-27,Basic
|
| 145 |
+
144,customer144@example.com,Customer 144,Japan,2024-10-14,Basic
|
| 146 |
+
145,customer145@example.com,Customer 145,UK,2024-10-14,Standard
|
| 147 |
+
146,customer146@example.com,Customer 146,USA,2024-06-17,Basic
|
| 148 |
+
147,customer147@example.com,Customer 147,Germany,2024-12-09,Standard
|
| 149 |
+
148,customer148@example.com,Customer 148,Canada,2024-03-03,Basic
|
| 150 |
+
149,customer149@example.com,Customer 149,USA,2024-07-29,Basic
|
| 151 |
+
150,customer150@example.com,Customer 150,UK,2024-06-30,Standard
|
| 152 |
+
151,customer151@example.com,Customer 151,Brazil,2024-12-06,Standard
|
| 153 |
+
152,customer152@example.com,Customer 152,France,2024-08-04,Basic
|
| 154 |
+
153,customer153@example.com,Customer 153,UK,2024-01-27,Basic
|
| 155 |
+
154,customer154@example.com,Customer 154,Germany,2024-05-27,Basic
|
| 156 |
+
155,customer155@example.com,Customer 155,USA,2024-11-03,Basic
|
| 157 |
+
156,customer156@example.com,Customer 156,USA,2024-06-08,Premium
|
| 158 |
+
157,customer157@example.com,Customer 157,UK,2024-06-29,Standard
|
| 159 |
+
158,customer158@example.com,Customer 158,France,2024-02-23,Premium
|
| 160 |
+
159,customer159@example.com,Customer 159,USA,2024-10-22,Basic
|
| 161 |
+
160,customer160@example.com,Customer 160,USA,2024-09-16,Standard
|
| 162 |
+
161,customer161@example.com,Customer 161,USA,2024-04-18,Basic
|
| 163 |
+
162,customer162@example.com,Customer 162,France,2024-03-20,Standard
|
| 164 |
+
163,customer163@example.com,Customer 163,USA,2024-12-02,Standard
|
| 165 |
+
164,customer164@example.com,Customer 164,Brazil,2024-09-03,Basic
|
| 166 |
+
165,customer165@example.com,Customer 165,Japan,2024-04-24,Basic
|
| 167 |
+
166,customer166@example.com,Customer 166,USA,2024-02-25,Standard
|
| 168 |
+
167,customer167@example.com,Customer 167,USA,2024-06-28,Standard
|
| 169 |
+
168,customer168@example.com,Customer 168,France,2024-10-11,Premium
|
| 170 |
+
169,customer169@example.com,Customer 169,USA,2024-07-07,Standard
|
| 171 |
+
170,customer170@example.com,Customer 170,USA,2024-02-28,Standard
|
| 172 |
+
171,customer171@example.com,Customer 171,Brazil,2024-05-22,Standard
|
| 173 |
+
172,customer172@example.com,Customer 172,France,2024-10-20,Standard
|
| 174 |
+
173,customer173@example.com,Customer 173,Germany,2024-04-25,Basic
|
| 175 |
+
174,customer174@example.com,Customer 174,Australia,2024-08-07,Basic
|
| 176 |
+
175,customer175@example.com,Customer 175,Australia,2024-10-14,Standard
|
| 177 |
+
176,customer176@example.com,Customer 176,USA,2024-11-14,Basic
|
| 178 |
+
177,customer177@example.com,Customer 177,USA,2024-11-10,Standard
|
| 179 |
+
178,customer178@example.com,Customer 178,UK,2024-12-11,Basic
|
| 180 |
+
179,customer179@example.com,Customer 179,UK,2024-11-25,Basic
|
| 181 |
+
180,customer180@example.com,Customer 180,Germany,2024-10-12,Basic
|
| 182 |
+
181,customer181@example.com,Customer 181,Canada,2024-01-14,Standard
|
| 183 |
+
182,customer182@example.com,Customer 182,Canada,2024-11-07,Premium
|
| 184 |
+
183,customer183@example.com,Customer 183,Brazil,2024-12-02,Basic
|
| 185 |
+
184,customer184@example.com,Customer 184,USA,2024-12-21,Standard
|
| 186 |
+
185,customer185@example.com,Customer 185,UK,2024-05-16,Premium
|
| 187 |
+
186,customer186@example.com,Customer 186,UK,2024-01-15,Standard
|
| 188 |
+
187,customer187@example.com,Customer 187,Japan,2024-04-02,Standard
|
| 189 |
+
188,customer188@example.com,Customer 188,USA,2024-05-19,Standard
|
| 190 |
+
189,customer189@example.com,Customer 189,USA,2024-12-25,Standard
|
| 191 |
+
190,customer190@example.com,Customer 190,UK,2024-06-07,Basic
|
| 192 |
+
191,customer191@example.com,Customer 191,UK,2024-06-22,Basic
|
| 193 |
+
192,customer192@example.com,Customer 192,USA,2024-06-28,Standard
|
| 194 |
+
193,customer193@example.com,Customer 193,USA,2024-01-04,Basic
|
| 195 |
+
194,customer194@example.com,Customer 194,Brazil,2024-04-02,Premium
|
| 196 |
+
195,customer195@example.com,Customer 195,UK,2024-03-14,Basic
|
| 197 |
+
196,customer196@example.com,Customer 196,Japan,2024-10-16,Basic
|
| 198 |
+
197,customer197@example.com,Customer 197,Germany,2024-12-02,Premium
|
| 199 |
+
198,customer198@example.com,Customer 198,USA,2024-07-24,Premium
|
| 200 |
+
199,customer199@example.com,Customer 199,Brazil,2024-02-05,Standard
|
| 201 |
+
200,customer200@example.com,Customer 200,Japan,2024-03-13,Standard
|
| 202 |
+
201,customer201@example.com,Customer 201,Brazil,2024-11-20,Standard
|
| 203 |
+
202,customer202@example.com,Customer 202,Brazil,2024-01-16,Basic
|
| 204 |
+
203,customer203@example.com,Customer 203,Japan,2024-02-16,Basic
|
| 205 |
+
204,customer204@example.com,Customer 204,USA,2024-09-28,Standard
|
| 206 |
+
205,customer205@example.com,Customer 205,Germany,2024-04-20,Premium
|
| 207 |
+
206,customer206@example.com,Customer 206,USA,2024-07-11,Basic
|
| 208 |
+
207,customer207@example.com,Customer 207,UK,2024-08-02,Standard
|
| 209 |
+
208,customer208@example.com,Customer 208,USA,2024-08-20,Standard
|
| 210 |
+
209,customer209@example.com,Customer 209,UK,2024-06-23,Standard
|
| 211 |
+
210,customer210@example.com,Customer 210,Brazil,2024-03-21,Premium
|
| 212 |
+
211,customer211@example.com,Customer 211,USA,2024-07-08,Standard
|
| 213 |
+
212,customer212@example.com,Customer 212,Australia,2024-06-08,Basic
|
| 214 |
+
213,customer213@example.com,Customer 213,Germany,2024-06-15,Standard
|
| 215 |
+
214,customer214@example.com,Customer 214,UK,2024-10-17,Standard
|
| 216 |
+
215,customer215@example.com,Customer 215,Brazil,2024-11-01,Standard
|
| 217 |
+
216,customer216@example.com,Customer 216,Brazil,2024-02-13,Standard
|
| 218 |
+
217,customer217@example.com,Customer 217,Germany,2024-01-27,Standard
|
| 219 |
+
218,customer218@example.com,Customer 218,Canada,2024-03-20,Basic
|
| 220 |
+
219,customer219@example.com,Customer 219,USA,2024-03-21,Standard
|
| 221 |
+
220,customer220@example.com,Customer 220,USA,2024-11-12,Standard
|
| 222 |
+
221,customer221@example.com,Customer 221,Brazil,2024-01-26,Basic
|
| 223 |
+
222,customer222@example.com,Customer 222,France,2024-12-11,Basic
|
| 224 |
+
223,customer223@example.com,Customer 223,Germany,2024-02-11,Premium
|
| 225 |
+
224,customer224@example.com,Customer 224,Canada,2024-05-19,Standard
|
| 226 |
+
225,customer225@example.com,Customer 225,USA,2024-08-14,Basic
|
| 227 |
+
226,customer226@example.com,Customer 226,France,2024-12-04,Premium
|
| 228 |
+
227,customer227@example.com,Customer 227,Germany,2024-08-05,Standard
|
| 229 |
+
228,customer228@example.com,Customer 228,Japan,2024-09-05,Premium
|
| 230 |
+
229,customer229@example.com,Customer 229,USA,2024-11-06,Standard
|
| 231 |
+
230,customer230@example.com,Customer 230,Brazil,2024-08-14,Standard
|
| 232 |
+
231,customer231@example.com,Customer 231,USA,2024-07-31,Standard
|
| 233 |
+
232,customer232@example.com,Customer 232,USA,2024-05-19,Premium
|
| 234 |
+
233,customer233@example.com,Customer 233,France,2024-04-20,Standard
|
| 235 |
+
234,customer234@example.com,Customer 234,Canada,2024-09-19,Standard
|
| 236 |
+
235,customer235@example.com,Customer 235,USA,2024-02-28,Premium
|
| 237 |
+
236,customer236@example.com,Customer 236,USA,2024-06-25,Standard
|
| 238 |
+
237,customer237@example.com,Customer 237,Japan,2024-08-08,Standard
|
| 239 |
+
238,customer238@example.com,Customer 238,USA,2024-02-26,Premium
|
| 240 |
+
239,customer239@example.com,Customer 239,France,2024-05-25,Standard
|
| 241 |
+
240,customer240@example.com,Customer 240,France,2024-12-13,Basic
|
| 242 |
+
241,customer241@example.com,Customer 241,UK,2024-12-13,Standard
|
| 243 |
+
242,customer242@example.com,Customer 242,France,2024-10-30,Standard
|
| 244 |
+
243,customer243@example.com,Customer 243,Germany,2024-09-06,Standard
|
| 245 |
+
244,customer244@example.com,Customer 244,Brazil,2024-09-26,Premium
|
| 246 |
+
245,customer245@example.com,Customer 245,USA,2024-12-07,Standard
|
| 247 |
+
246,customer246@example.com,Customer 246,Canada,2024-06-06,Basic
|
| 248 |
+
247,customer247@example.com,Customer 247,USA,2024-01-24,Basic
|
| 249 |
+
248,customer248@example.com,Customer 248,UK,2024-04-22,Standard
|
| 250 |
+
249,customer249@example.com,Customer 249,Canada,2024-07-21,Basic
|
| 251 |
+
250,customer250@example.com,Customer 250,USA,2024-11-02,Basic
|
| 252 |
+
251,customer251@example.com,Customer 251,UK,2024-01-29,Standard
|
| 253 |
+
252,customer252@example.com,Customer 252,Australia,2024-01-04,Premium
|
| 254 |
+
253,customer253@example.com,Customer 253,USA,2024-04-14,Standard
|
| 255 |
+
254,customer254@example.com,Customer 254,Germany,2024-06-03,Premium
|
| 256 |
+
255,customer255@example.com,Customer 255,Brazil,2024-04-18,Basic
|
| 257 |
+
256,customer256@example.com,Customer 256,Brazil,2024-03-11,Basic
|
| 258 |
+
257,customer257@example.com,Customer 257,USA,2024-05-10,Premium
|
| 259 |
+
258,customer258@example.com,Customer 258,USA,2024-05-28,Basic
|
| 260 |
+
259,customer259@example.com,Customer 259,USA,2024-06-16,Premium
|
| 261 |
+
260,customer260@example.com,Customer 260,Brazil,2024-03-02,Standard
|
| 262 |
+
261,customer261@example.com,Customer 261,Japan,2024-01-04,Basic
|
| 263 |
+
262,customer262@example.com,Customer 262,Japan,2024-09-11,Basic
|
| 264 |
+
263,customer263@example.com,Customer 263,UK,2024-08-08,Basic
|
| 265 |
+
264,customer264@example.com,Customer 264,USA,2024-03-30,Standard
|
| 266 |
+
265,customer265@example.com,Customer 265,Japan,2024-03-07,Standard
|
| 267 |
+
266,customer266@example.com,Customer 266,Canada,2024-07-13,Basic
|
| 268 |
+
267,customer267@example.com,Customer 267,France,2024-09-29,Standard
|
| 269 |
+
268,customer268@example.com,Customer 268,Brazil,2024-12-26,Basic
|
| 270 |
+
269,customer269@example.com,Customer 269,France,2024-04-27,Basic
|
| 271 |
+
270,customer270@example.com,Customer 270,USA,2024-09-13,Standard
|
| 272 |
+
271,customer271@example.com,Customer 271,Australia,2024-10-13,Basic
|
| 273 |
+
272,customer272@example.com,Customer 272,USA,2024-12-08,Basic
|
| 274 |
+
273,customer273@example.com,Customer 273,France,2024-06-30,Standard
|
| 275 |
+
274,customer274@example.com,Customer 274,Brazil,2024-02-06,Basic
|
| 276 |
+
275,customer275@example.com,Customer 275,USA,2024-07-22,Standard
|
| 277 |
+
276,customer276@example.com,Customer 276,USA,2024-01-22,Standard
|
| 278 |
+
277,customer277@example.com,Customer 277,USA,2024-08-11,Standard
|
| 279 |
+
278,customer278@example.com,Customer 278,Germany,2024-01-10,Standard
|
| 280 |
+
279,customer279@example.com,Customer 279,USA,2024-08-23,Basic
|
| 281 |
+
280,customer280@example.com,Customer 280,France,2024-02-09,Standard
|
| 282 |
+
281,customer281@example.com,Customer 281,Canada,2024-06-09,Premium
|
| 283 |
+
282,customer282@example.com,Customer 282,USA,2024-10-21,Premium
|
| 284 |
+
283,customer283@example.com,Customer 283,France,2024-08-07,Standard
|
| 285 |
+
284,customer284@example.com,Customer 284,USA,2024-10-20,Basic
|
| 286 |
+
285,customer285@example.com,Customer 285,Germany,2024-07-26,Standard
|
| 287 |
+
286,customer286@example.com,Customer 286,Brazil,2024-12-29,Standard
|
| 288 |
+
287,customer287@example.com,Customer 287,Japan,2024-11-23,Basic
|
| 289 |
+
288,customer288@example.com,Customer 288,USA,2024-08-01,Standard
|
| 290 |
+
289,customer289@example.com,Customer 289,UK,2024-05-28,Standard
|
| 291 |
+
290,customer290@example.com,Customer 290,USA,2024-02-28,Standard
|
| 292 |
+
291,customer291@example.com,Customer 291,USA,2024-07-26,Basic
|
| 293 |
+
292,customer292@example.com,Customer 292,Australia,2024-01-11,Basic
|
| 294 |
+
293,customer293@example.com,Customer 293,France,2024-06-15,Premium
|
| 295 |
+
294,customer294@example.com,Customer 294,USA,2024-03-28,Basic
|
| 296 |
+
295,customer295@example.com,Customer 295,Canada,2024-11-12,Standard
|
| 297 |
+
296,customer296@example.com,Customer 296,Germany,2024-08-23,Basic
|
| 298 |
+
297,customer297@example.com,Customer 297,UK,2024-12-19,Basic
|
| 299 |
+
298,customer298@example.com,Customer 298,USA,2024-07-04,Premium
|
| 300 |
+
299,customer299@example.com,Customer 299,USA,2024-02-15,Standard
|
| 301 |
+
300,customer300@example.com,Customer 300,Japan,2024-08-11,Premium
|
| 302 |
+
301,customer301@example.com,Customer 301,Brazil,2024-02-24,Premium
|
| 303 |
+
302,customer302@example.com,Customer 302,Germany,2024-05-04,Standard
|
| 304 |
+
303,customer303@example.com,Customer 303,Japan,2024-08-11,Basic
|
| 305 |
+
304,customer304@example.com,Customer 304,France,2024-10-28,Premium
|
| 306 |
+
305,customer305@example.com,Customer 305,USA,2024-07-24,Basic
|
| 307 |
+
306,customer306@example.com,Customer 306,USA,2024-09-25,Standard
|
| 308 |
+
307,customer307@example.com,Customer 307,UK,2024-02-10,Standard
|
| 309 |
+
308,customer308@example.com,Customer 308,Japan,2024-07-21,Standard
|
| 310 |
+
309,customer309@example.com,Customer 309,Australia,2024-06-07,Basic
|
| 311 |
+
310,customer310@example.com,Customer 310,Japan,2024-06-22,Premium
|
| 312 |
+
311,customer311@example.com,Customer 311,Japan,2024-04-23,Standard
|
| 313 |
+
312,customer312@example.com,Customer 312,USA,2024-06-19,Standard
|
| 314 |
+
313,customer313@example.com,Customer 313,USA,2024-03-27,Basic
|
| 315 |
+
314,customer314@example.com,Customer 314,USA,2024-02-09,Basic
|
| 316 |
+
315,customer315@example.com,Customer 315,Australia,2024-09-18,Standard
|
| 317 |
+
316,customer316@example.com,Customer 316,Japan,2024-11-20,Standard
|
| 318 |
+
317,customer317@example.com,Customer 317,UK,2024-02-28,Basic
|
| 319 |
+
318,customer318@example.com,Customer 318,France,2024-09-28,Standard
|
| 320 |
+
319,customer319@example.com,Customer 319,USA,2024-09-18,Standard
|
| 321 |
+
320,customer320@example.com,Customer 320,Brazil,2024-04-09,Premium
|
| 322 |
+
321,customer321@example.com,Customer 321,Japan,2024-06-27,Basic
|
| 323 |
+
322,customer322@example.com,Customer 322,Brazil,2024-06-28,Standard
|
| 324 |
+
323,customer323@example.com,Customer 323,Australia,2024-11-26,Standard
|
| 325 |
+
324,customer324@example.com,Customer 324,Japan,2024-03-16,Premium
|
| 326 |
+
325,customer325@example.com,Customer 325,USA,2024-04-30,Basic
|
| 327 |
+
326,customer326@example.com,Customer 326,Canada,2024-02-22,Basic
|
| 328 |
+
327,customer327@example.com,Customer 327,UK,2024-03-15,Basic
|
| 329 |
+
328,customer328@example.com,Customer 328,Brazil,2024-05-11,Standard
|
| 330 |
+
329,customer329@example.com,Customer 329,Australia,2024-04-11,Standard
|
| 331 |
+
330,customer330@example.com,Customer 330,Japan,2024-03-29,Standard
|
| 332 |
+
331,customer331@example.com,Customer 331,Australia,2024-11-04,Basic
|
| 333 |
+
332,customer332@example.com,Customer 332,USA,2024-03-19,Basic
|
| 334 |
+
333,customer333@example.com,Customer 333,Australia,2024-12-01,Basic
|
| 335 |
+
334,customer334@example.com,Customer 334,USA,2024-02-08,Basic
|
| 336 |
+
335,customer335@example.com,Customer 335,Japan,2024-03-31,Standard
|
| 337 |
+
336,customer336@example.com,Customer 336,Japan,2024-11-17,Standard
|
| 338 |
+
337,customer337@example.com,Customer 337,USA,2024-09-09,Premium
|
| 339 |
+
338,customer338@example.com,Customer 338,Australia,2024-08-25,Standard
|
| 340 |
+
339,customer339@example.com,Customer 339,Germany,2024-10-15,Basic
|
| 341 |
+
340,customer340@example.com,Customer 340,UK,2024-10-23,Standard
|
| 342 |
+
341,customer341@example.com,Customer 341,Australia,2024-08-17,Basic
|
| 343 |
+
342,customer342@example.com,Customer 342,USA,2024-12-14,Standard
|
| 344 |
+
343,customer343@example.com,Customer 343,USA,2024-10-16,Basic
|
| 345 |
+
344,customer344@example.com,Customer 344,USA,2024-11-25,Basic
|
| 346 |
+
345,customer345@example.com,Customer 345,UK,2024-11-21,Basic
|
| 347 |
+
346,customer346@example.com,Customer 346,Japan,2024-11-15,Standard
|
| 348 |
+
347,customer347@example.com,Customer 347,Brazil,2024-06-14,Basic
|
| 349 |
+
348,customer348@example.com,Customer 348,USA,2024-11-17,Standard
|
| 350 |
+
349,customer349@example.com,Customer 349,France,2024-06-10,Premium
|
| 351 |
+
350,customer350@example.com,Customer 350,UK,2024-03-18,Standard
|
| 352 |
+
351,customer351@example.com,Customer 351,Brazil,2024-08-13,Standard
|
| 353 |
+
352,customer352@example.com,Customer 352,Germany,2024-02-04,Standard
|
| 354 |
+
353,customer353@example.com,Customer 353,Brazil,2024-08-28,Basic
|
| 355 |
+
354,customer354@example.com,Customer 354,USA,2024-08-14,Basic
|
| 356 |
+
355,customer355@example.com,Customer 355,Brazil,2024-11-19,Premium
|
| 357 |
+
356,customer356@example.com,Customer 356,USA,2024-06-04,Basic
|
| 358 |
+
357,customer357@example.com,Customer 357,Brazil,2024-05-20,Standard
|
| 359 |
+
358,customer358@example.com,Customer 358,USA,2024-10-29,Standard
|
| 360 |
+
359,customer359@example.com,Customer 359,USA,2024-01-29,Basic
|
| 361 |
+
360,customer360@example.com,Customer 360,UK,2024-06-29,Standard
|
| 362 |
+
361,customer361@example.com,Customer 361,Canada,2024-09-16,Basic
|
| 363 |
+
362,customer362@example.com,Customer 362,UK,2024-02-07,Standard
|
| 364 |
+
363,customer363@example.com,Customer 363,France,2024-06-07,Basic
|
| 365 |
+
364,customer364@example.com,Customer 364,Germany,2024-08-24,Basic
|
| 366 |
+
365,customer365@example.com,Customer 365,UK,2024-08-19,Standard
|
| 367 |
+
366,customer366@example.com,Customer 366,France,2024-01-20,Standard
|
| 368 |
+
367,customer367@example.com,Customer 367,USA,2024-01-30,Basic
|
| 369 |
+
368,customer368@example.com,Customer 368,Canada,2024-07-07,Standard
|
| 370 |
+
369,customer369@example.com,Customer 369,USA,2024-05-26,Basic
|
| 371 |
+
370,customer370@example.com,Customer 370,Brazil,2024-02-09,Premium
|
| 372 |
+
371,customer371@example.com,Customer 371,Germany,2024-11-26,Basic
|
| 373 |
+
372,customer372@example.com,Customer 372,Canada,2024-02-16,Basic
|
| 374 |
+
373,customer373@example.com,Customer 373,Canada,2024-11-10,Premium
|
| 375 |
+
374,customer374@example.com,Customer 374,Canada,2024-10-31,Basic
|
| 376 |
+
375,customer375@example.com,Customer 375,UK,2024-09-16,Standard
|
| 377 |
+
376,customer376@example.com,Customer 376,USA,2024-07-15,Standard
|
| 378 |
+
377,customer377@example.com,Customer 377,France,2024-08-24,Standard
|
| 379 |
+
378,customer378@example.com,Customer 378,UK,2024-10-24,Standard
|
| 380 |
+
379,customer379@example.com,Customer 379,UK,2024-10-10,Basic
|
| 381 |
+
380,customer380@example.com,Customer 380,Japan,2024-01-22,Standard
|
| 382 |
+
381,customer381@example.com,Customer 381,Canada,2024-08-18,Basic
|
| 383 |
+
382,customer382@example.com,Customer 382,UK,2024-10-19,Standard
|
| 384 |
+
383,customer383@example.com,Customer 383,UK,2024-11-29,Standard
|
| 385 |
+
384,customer384@example.com,Customer 384,UK,2024-04-06,Standard
|
| 386 |
+
385,customer385@example.com,Customer 385,UK,2024-06-13,Standard
|
| 387 |
+
386,customer386@example.com,Customer 386,USA,2024-11-05,Standard
|
| 388 |
+
387,customer387@example.com,Customer 387,USA,2024-08-31,Standard
|
| 389 |
+
388,customer388@example.com,Customer 388,UK,2024-09-13,Premium
|
| 390 |
+
389,customer389@example.com,Customer 389,Brazil,2024-03-18,Basic
|
| 391 |
+
390,customer390@example.com,Customer 390,Canada,2024-02-01,Standard
|
| 392 |
+
391,customer391@example.com,Customer 391,Brazil,2024-08-18,Basic
|
| 393 |
+
392,customer392@example.com,Customer 392,France,2024-02-22,Basic
|
| 394 |
+
393,customer393@example.com,Customer 393,UK,2024-06-24,Standard
|
| 395 |
+
394,customer394@example.com,Customer 394,Germany,2024-12-31,Standard
|
| 396 |
+
395,customer395@example.com,Customer 395,USA,2024-02-13,Standard
|
| 397 |
+
396,customer396@example.com,Customer 396,USA,2024-09-15,Standard
|
| 398 |
+
397,customer397@example.com,Customer 397,UK,2024-11-26,Premium
|
| 399 |
+
398,customer398@example.com,Customer 398,France,2024-03-29,Standard
|
| 400 |
+
399,customer399@example.com,Customer 399,France,2024-01-21,Basic
|
| 401 |
+
400,customer400@example.com,Customer 400,Germany,2024-05-06,Standard
|
| 402 |
+
401,customer401@example.com,Customer 401,UK,2024-12-28,Standard
|
| 403 |
+
402,customer402@example.com,Customer 402,USA,2024-08-12,Standard
|
| 404 |
+
403,customer403@example.com,Customer 403,Germany,2024-08-12,Standard
|
| 405 |
+
404,customer404@example.com,Customer 404,Brazil,2024-09-25,Standard
|
| 406 |
+
405,customer405@example.com,Customer 405,Australia,2024-09-24,Basic
|
| 407 |
+
406,customer406@example.com,Customer 406,USA,2024-11-08,Standard
|
| 408 |
+
407,customer407@example.com,Customer 407,USA,2024-03-22,Basic
|
| 409 |
+
408,customer408@example.com,Customer 408,Germany,2024-07-05,Basic
|
| 410 |
+
409,customer409@example.com,Customer 409,France,2024-07-09,Standard
|
| 411 |
+
410,customer410@example.com,Customer 410,UK,2024-05-24,Basic
|
| 412 |
+
411,customer411@example.com,Customer 411,Australia,2024-07-17,Basic
|
| 413 |
+
412,customer412@example.com,Customer 412,Australia,2024-07-28,Standard
|
| 414 |
+
413,customer413@example.com,Customer 413,Canada,2024-06-22,Standard
|
| 415 |
+
414,customer414@example.com,Customer 414,USA,2024-12-13,Standard
|
| 416 |
+
415,customer415@example.com,Customer 415,USA,2024-11-02,Basic
|
| 417 |
+
416,customer416@example.com,Customer 416,USA,2024-01-27,Standard
|
| 418 |
+
417,customer417@example.com,Customer 417,USA,2024-11-19,Basic
|
| 419 |
+
418,customer418@example.com,Customer 418,Germany,2024-11-27,Standard
|
| 420 |
+
419,customer419@example.com,Customer 419,Japan,2024-06-20,Basic
|
| 421 |
+
420,customer420@example.com,Customer 420,USA,2024-02-03,Standard
|
| 422 |
+
421,customer421@example.com,Customer 421,UK,2024-06-17,Standard
|
| 423 |
+
422,customer422@example.com,Customer 422,France,2024-02-18,Premium
|
| 424 |
+
423,customer423@example.com,Customer 423,USA,2024-10-12,Premium
|
| 425 |
+
424,customer424@example.com,Customer 424,Canada,2024-12-13,Basic
|
| 426 |
+
425,customer425@example.com,Customer 425,Germany,2024-07-16,Basic
|
| 427 |
+
426,customer426@example.com,Customer 426,USA,2024-05-25,Basic
|
| 428 |
+
427,customer427@example.com,Customer 427,France,2024-05-09,Basic
|
| 429 |
+
428,customer428@example.com,Customer 428,USA,2024-12-02,Standard
|
| 430 |
+
429,customer429@example.com,Customer 429,Australia,2024-11-04,Basic
|
| 431 |
+
430,customer430@example.com,Customer 430,Australia,2024-03-17,Standard
|
| 432 |
+
431,customer431@example.com,Customer 431,USA,2024-06-19,Basic
|
| 433 |
+
432,customer432@example.com,Customer 432,UK,2024-02-11,Premium
|
| 434 |
+
433,customer433@example.com,Customer 433,USA,2024-10-25,Standard
|
| 435 |
+
434,customer434@example.com,Customer 434,Brazil,2024-12-05,Standard
|
| 436 |
+
435,customer435@example.com,Customer 435,Germany,2024-03-13,Standard
|
| 437 |
+
436,customer436@example.com,Customer 436,USA,2024-06-28,Basic
|
| 438 |
+
437,customer437@example.com,Customer 437,USA,2024-06-07,Standard
|
| 439 |
+
438,customer438@example.com,Customer 438,Japan,2024-12-01,Standard
|
| 440 |
+
439,customer439@example.com,Customer 439,Germany,2024-12-23,Standard
|
| 441 |
+
440,customer440@example.com,Customer 440,Australia,2024-12-05,Premium
|
| 442 |
+
441,customer441@example.com,Customer 441,France,2024-07-19,Standard
|
| 443 |
+
442,customer442@example.com,Customer 442,Brazil,2024-03-07,Premium
|
| 444 |
+
443,customer443@example.com,Customer 443,France,2024-10-31,Standard
|
| 445 |
+
444,customer444@example.com,Customer 444,Brazil,2024-12-28,Standard
|
| 446 |
+
445,customer445@example.com,Customer 445,Japan,2024-02-13,Basic
|
| 447 |
+
446,customer446@example.com,Customer 446,France,2024-06-07,Premium
|
| 448 |
+
447,customer447@example.com,Customer 447,Canada,2024-10-13,Basic
|
| 449 |
+
448,customer448@example.com,Customer 448,Germany,2024-07-11,Basic
|
| 450 |
+
449,customer449@example.com,Customer 449,Japan,2024-11-25,Basic
|
| 451 |
+
450,customer450@example.com,Customer 450,Germany,2024-06-17,Basic
|
| 452 |
+
451,customer451@example.com,Customer 451,Japan,2024-03-06,Premium
|
| 453 |
+
452,customer452@example.com,Customer 452,Canada,2024-12-09,Premium
|
| 454 |
+
453,customer453@example.com,Customer 453,Germany,2024-12-25,Premium
|
| 455 |
+
454,customer454@example.com,Customer 454,USA,2024-12-16,Standard
|
| 456 |
+
455,customer455@example.com,Customer 455,USA,2024-09-26,Standard
|
| 457 |
+
456,customer456@example.com,Customer 456,France,2024-02-17,Basic
|
| 458 |
+
457,customer457@example.com,Customer 457,Australia,2024-11-26,Standard
|
| 459 |
+
458,customer458@example.com,Customer 458,Germany,2024-12-09,Standard
|
| 460 |
+
459,customer459@example.com,Customer 459,France,2024-08-04,Standard
|
| 461 |
+
460,customer460@example.com,Customer 460,USA,2024-09-17,Standard
|
| 462 |
+
461,customer461@example.com,Customer 461,USA,2024-07-04,Standard
|
| 463 |
+
462,customer462@example.com,Customer 462,USA,2024-01-10,Basic
|
| 464 |
+
463,customer463@example.com,Customer 463,USA,2024-07-04,Standard
|
| 465 |
+
464,customer464@example.com,Customer 464,UK,2024-06-07,Basic
|
| 466 |
+
465,customer465@example.com,Customer 465,Germany,2024-04-02,Basic
|
| 467 |
+
466,customer466@example.com,Customer 466,USA,2024-04-19,Basic
|
| 468 |
+
467,customer467@example.com,Customer 467,USA,2024-06-23,Basic
|
| 469 |
+
468,customer468@example.com,Customer 468,Canada,2024-09-05,Basic
|
| 470 |
+
469,customer469@example.com,Customer 469,Canada,2024-04-08,Premium
|
| 471 |
+
470,customer470@example.com,Customer 470,USA,2024-04-25,Standard
|
| 472 |
+
471,customer471@example.com,Customer 471,UK,2024-03-11,Standard
|
| 473 |
+
472,customer472@example.com,Customer 472,Germany,2024-03-20,Premium
|
| 474 |
+
473,customer473@example.com,Customer 473,UK,2024-02-09,Premium
|
| 475 |
+
474,customer474@example.com,Customer 474,USA,2024-05-31,Standard
|
| 476 |
+
475,customer475@example.com,Customer 475,UK,2024-02-21,Standard
|
| 477 |
+
476,customer476@example.com,Customer 476,Brazil,2024-09-16,Standard
|
| 478 |
+
477,customer477@example.com,Customer 477,France,2024-10-03,Basic
|
| 479 |
+
478,customer478@example.com,Customer 478,Canada,2024-09-26,Standard
|
| 480 |
+
479,customer479@example.com,Customer 479,Japan,2024-01-20,Basic
|
| 481 |
+
480,customer480@example.com,Customer 480,Australia,2024-12-04,Premium
|
| 482 |
+
481,customer481@example.com,Customer 481,UK,2024-06-21,Standard
|
| 483 |
+
482,customer482@example.com,Customer 482,USA,2024-11-12,Premium
|
| 484 |
+
483,customer483@example.com,Customer 483,UK,2024-03-08,Standard
|
| 485 |
+
484,customer484@example.com,Customer 484,Australia,2024-11-01,Basic
|
| 486 |
+
485,customer485@example.com,Customer 485,Japan,2024-07-11,Basic
|
| 487 |
+
486,customer486@example.com,Customer 486,Brazil,2024-03-19,Standard
|
| 488 |
+
487,customer487@example.com,Customer 487,UK,2024-03-24,Premium
|
| 489 |
+
488,customer488@example.com,Customer 488,Canada,2024-04-02,Premium
|
| 490 |
+
489,customer489@example.com,Customer 489,Germany,2024-12-20,Basic
|
| 491 |
+
490,customer490@example.com,Customer 490,France,2024-11-15,Basic
|
| 492 |
+
491,customer491@example.com,Customer 491,USA,2024-03-25,Standard
|
| 493 |
+
492,customer492@example.com,Customer 492,USA,2024-08-12,Premium
|
| 494 |
+
493,customer493@example.com,Customer 493,UK,2024-01-23,Basic
|
| 495 |
+
494,customer494@example.com,Customer 494,USA,2024-07-29,Standard
|
| 496 |
+
495,customer495@example.com,Customer 495,UK,2024-07-05,Basic
|
| 497 |
+
496,customer496@example.com,Customer 496,Canada,2024-12-12,Standard
|
| 498 |
+
497,customer497@example.com,Customer 497,UK,2024-05-01,Basic
|
| 499 |
+
498,customer498@example.com,Customer 498,USA,2024-08-15,Basic
|
| 500 |
+
499,customer499@example.com,Customer 499,Germany,2024-11-08,Standard
|
| 501 |
+
500,customer500@example.com,Customer 500,USA,2024-05-25,Premium
|
| 502 |
+
501,customer501@example.com,Customer 501,France,2024-08-17,Standard
|
| 503 |
+
502,customer502@example.com,Customer 502,USA,2024-04-29,Standard
|
| 504 |
+
503,customer503@example.com,Customer 503,UK,2024-09-30,Basic
|
| 505 |
+
504,customer504@example.com,Customer 504,Germany,2024-05-02,Standard
|
| 506 |
+
505,customer505@example.com,Customer 505,USA,2024-06-07,Basic
|
| 507 |
+
506,customer506@example.com,Customer 506,France,2024-08-28,Standard
|
| 508 |
+
507,customer507@example.com,Customer 507,USA,2024-04-09,Basic
|
| 509 |
+
508,customer508@example.com,Customer 508,Germany,2024-07-07,Premium
|
| 510 |
+
509,customer509@example.com,Customer 509,USA,2024-12-13,Basic
|
| 511 |
+
510,customer510@example.com,Customer 510,UK,2024-10-19,Basic
|
| 512 |
+
511,customer511@example.com,Customer 511,USA,2024-08-13,Standard
|
| 513 |
+
512,customer512@example.com,Customer 512,UK,2024-08-24,Basic
|
| 514 |
+
513,customer513@example.com,Customer 513,Australia,2024-05-24,Premium
|
| 515 |
+
514,customer514@example.com,Customer 514,UK,2024-07-14,Standard
|
| 516 |
+
515,customer515@example.com,Customer 515,Australia,2024-09-14,Basic
|
| 517 |
+
516,customer516@example.com,Customer 516,Japan,2024-09-27,Standard
|
| 518 |
+
517,customer517@example.com,Customer 517,USA,2024-08-02,Basic
|
| 519 |
+
518,customer518@example.com,Customer 518,USA,2024-03-23,Basic
|
| 520 |
+
519,customer519@example.com,Customer 519,USA,2024-04-12,Standard
|
| 521 |
+
520,customer520@example.com,Customer 520,Germany,2024-11-05,Basic
|
| 522 |
+
521,customer521@example.com,Customer 521,Brazil,2024-03-11,Premium
|
| 523 |
+
522,customer522@example.com,Customer 522,UK,2024-05-08,Standard
|
| 524 |
+
523,customer523@example.com,Customer 523,France,2024-01-27,Basic
|
| 525 |
+
524,customer524@example.com,Customer 524,Australia,2024-11-24,Standard
|
| 526 |
+
525,customer525@example.com,Customer 525,France,2024-09-03,Standard
|
| 527 |
+
526,customer526@example.com,Customer 526,Australia,2024-07-09,Basic
|
| 528 |
+
527,customer527@example.com,Customer 527,Brazil,2024-10-10,Standard
|
| 529 |
+
528,customer528@example.com,Customer 528,USA,2024-02-22,Basic
|
| 530 |
+
529,customer529@example.com,Customer 529,USA,2024-12-30,Basic
|
| 531 |
+
530,customer530@example.com,Customer 530,USA,2024-09-21,Premium
|
| 532 |
+
531,customer531@example.com,Customer 531,USA,2024-03-04,Standard
|
| 533 |
+
532,customer532@example.com,Customer 532,France,2024-05-25,Basic
|
| 534 |
+
533,customer533@example.com,Customer 533,Germany,2024-02-12,Basic
|
| 535 |
+
534,customer534@example.com,Customer 534,USA,2024-03-23,Premium
|
| 536 |
+
535,customer535@example.com,Customer 535,Canada,2024-05-19,Standard
|
| 537 |
+
536,customer536@example.com,Customer 536,Australia,2024-08-18,Basic
|
| 538 |
+
537,customer537@example.com,Customer 537,USA,2024-09-19,Standard
|
| 539 |
+
538,customer538@example.com,Customer 538,France,2024-03-16,Basic
|
| 540 |
+
539,customer539@example.com,Customer 539,Canada,2024-08-11,Standard
|
| 541 |
+
540,customer540@example.com,Customer 540,USA,2024-02-16,Premium
|
| 542 |
+
541,customer541@example.com,Customer 541,Australia,2024-04-23,Premium
|
| 543 |
+
542,customer542@example.com,Customer 542,Brazil,2024-08-18,Standard
|
| 544 |
+
543,customer543@example.com,Customer 543,USA,2024-06-27,Standard
|
| 545 |
+
544,customer544@example.com,Customer 544,USA,2024-01-14,Standard
|
| 546 |
+
545,customer545@example.com,Customer 545,UK,2024-07-31,Premium
|
| 547 |
+
546,customer546@example.com,Customer 546,Canada,2024-01-28,Standard
|
| 548 |
+
547,customer547@example.com,Customer 547,Brazil,2024-07-21,Standard
|
| 549 |
+
548,customer548@example.com,Customer 548,UK,2024-09-14,Standard
|
| 550 |
+
549,customer549@example.com,Customer 549,Canada,2024-07-10,Standard
|
| 551 |
+
550,customer550@example.com,Customer 550,USA,2024-04-30,Premium
|
| 552 |
+
551,customer551@example.com,Customer 551,Canada,2024-07-16,Standard
|
| 553 |
+
552,customer552@example.com,Customer 552,France,2024-02-11,Premium
|
| 554 |
+
553,customer553@example.com,Customer 553,USA,2024-07-10,Standard
|
| 555 |
+
554,customer554@example.com,Customer 554,Australia,2024-04-24,Standard
|
| 556 |
+
555,customer555@example.com,Customer 555,Japan,2024-01-15,Standard
|
| 557 |
+
556,customer556@example.com,Customer 556,France,2024-06-12,Standard
|
| 558 |
+
557,customer557@example.com,Customer 557,USA,2024-02-20,Standard
|
| 559 |
+
558,customer558@example.com,Customer 558,Brazil,2024-12-31,Premium
|
| 560 |
+
559,customer559@example.com,Customer 559,Australia,2024-11-28,Basic
|
| 561 |
+
560,customer560@example.com,Customer 560,UK,2024-06-20,Basic
|
| 562 |
+
561,customer561@example.com,Customer 561,UK,2024-03-15,Basic
|
| 563 |
+
562,customer562@example.com,Customer 562,UK,2024-03-11,Standard
|
| 564 |
+
563,customer563@example.com,Customer 563,Germany,2024-01-20,Standard
|
| 565 |
+
564,customer564@example.com,Customer 564,UK,2024-05-26,Standard
|
| 566 |
+
565,customer565@example.com,Customer 565,Japan,2024-08-29,Premium
|
| 567 |
+
566,customer566@example.com,Customer 566,Australia,2024-12-22,Standard
|
| 568 |
+
567,customer567@example.com,Customer 567,USA,2024-03-12,Standard
|
| 569 |
+
568,customer568@example.com,Customer 568,Brazil,2024-12-27,Premium
|
| 570 |
+
569,customer569@example.com,Customer 569,France,2024-08-28,Standard
|
| 571 |
+
570,customer570@example.com,Customer 570,Australia,2024-08-17,Standard
|
| 572 |
+
571,customer571@example.com,Customer 571,Canada,2024-11-11,Standard
|
| 573 |
+
572,customer572@example.com,Customer 572,UK,2024-01-03,Premium
|
| 574 |
+
573,customer573@example.com,Customer 573,Canada,2024-02-10,Standard
|
| 575 |
+
574,customer574@example.com,Customer 574,Brazil,2024-01-10,Standard
|
| 576 |
+
575,customer575@example.com,Customer 575,USA,2024-05-11,Standard
|
| 577 |
+
576,customer576@example.com,Customer 576,Australia,2024-04-20,Standard
|
| 578 |
+
577,customer577@example.com,Customer 577,Germany,2024-03-17,Standard
|
| 579 |
+
578,customer578@example.com,Customer 578,Germany,2024-10-07,Premium
|
| 580 |
+
579,customer579@example.com,Customer 579,UK,2024-11-07,Standard
|
| 581 |
+
580,customer580@example.com,Customer 580,Canada,2024-09-27,Basic
|
| 582 |
+
581,customer581@example.com,Customer 581,USA,2024-08-04,Standard
|
| 583 |
+
582,customer582@example.com,Customer 582,Japan,2024-02-26,Standard
|
| 584 |
+
583,customer583@example.com,Customer 583,Japan,2024-05-27,Basic
|
| 585 |
+
584,customer584@example.com,Customer 584,USA,2024-05-01,Standard
|
| 586 |
+
585,customer585@example.com,Customer 585,Japan,2024-06-03,Standard
|
| 587 |
+
586,customer586@example.com,Customer 586,USA,2024-03-03,Basic
|
| 588 |
+
587,customer587@example.com,Customer 587,Germany,2024-01-25,Basic
|
| 589 |
+
588,customer588@example.com,Customer 588,France,2024-05-02,Basic
|
| 590 |
+
589,customer589@example.com,Customer 589,UK,2024-08-02,Premium
|
| 591 |
+
590,customer590@example.com,Customer 590,USA,2024-11-23,Standard
|
| 592 |
+
591,customer591@example.com,Customer 591,Japan,2024-11-14,Basic
|
| 593 |
+
592,customer592@example.com,Customer 592,USA,2024-08-22,Standard
|
| 594 |
+
593,customer593@example.com,Customer 593,USA,2024-02-02,Standard
|
| 595 |
+
594,customer594@example.com,Customer 594,Australia,2024-02-26,Basic
|
| 596 |
+
595,customer595@example.com,Customer 595,UK,2024-09-12,Basic
|
| 597 |
+
596,customer596@example.com,Customer 596,Japan,2024-11-01,Standard
|
| 598 |
+
597,customer597@example.com,Customer 597,Canada,2024-10-01,Basic
|
| 599 |
+
598,customer598@example.com,Customer 598,USA,2024-01-09,Standard
|
| 600 |
+
599,customer599@example.com,Customer 599,USA,2024-11-19,Standard
|
| 601 |
+
600,customer600@example.com,Customer 600,Brazil,2024-09-20,Standard
|
| 602 |
+
601,customer601@example.com,Customer 601,USA,2024-10-21,Standard
|
| 603 |
+
602,customer602@example.com,Customer 602,Canada,2024-05-03,Basic
|
| 604 |
+
603,customer603@example.com,Customer 603,Germany,2024-03-14,Standard
|
| 605 |
+
604,customer604@example.com,Customer 604,Australia,2024-05-29,Premium
|
| 606 |
+
605,customer605@example.com,Customer 605,Canada,2024-08-07,Standard
|
| 607 |
+
606,customer606@example.com,Customer 606,France,2024-01-01,Standard
|
| 608 |
+
607,customer607@example.com,Customer 607,Germany,2024-11-10,Standard
|
| 609 |
+
608,customer608@example.com,Customer 608,Australia,2024-06-29,Basic
|
| 610 |
+
609,customer609@example.com,Customer 609,USA,2024-05-03,Standard
|
| 611 |
+
610,customer610@example.com,Customer 610,USA,2024-10-19,Basic
|
| 612 |
+
611,customer611@example.com,Customer 611,Canada,2024-08-01,Standard
|
| 613 |
+
612,customer612@example.com,Customer 612,UK,2024-04-05,Basic
|
| 614 |
+
613,customer613@example.com,Customer 613,France,2024-12-06,Standard
|
| 615 |
+
614,customer614@example.com,Customer 614,Germany,2024-12-08,Standard
|
| 616 |
+
615,customer615@example.com,Customer 615,Germany,2024-02-13,Basic
|
| 617 |
+
616,customer616@example.com,Customer 616,UK,2024-09-25,Basic
|
| 618 |
+
617,customer617@example.com,Customer 617,Canada,2024-07-03,Basic
|
| 619 |
+
618,customer618@example.com,Customer 618,UK,2024-02-04,Standard
|
| 620 |
+
619,customer619@example.com,Customer 619,Canada,2024-09-26,Standard
|
| 621 |
+
620,customer620@example.com,Customer 620,USA,2024-10-05,Standard
|
| 622 |
+
621,customer621@example.com,Customer 621,USA,2024-09-16,Standard
|
| 623 |
+
622,customer622@example.com,Customer 622,USA,2024-09-16,Basic
|
| 624 |
+
623,customer623@example.com,Customer 623,USA,2024-10-10,Basic
|
| 625 |
+
624,customer624@example.com,Customer 624,USA,2024-01-11,Basic
|
| 626 |
+
625,customer625@example.com,Customer 625,Germany,2024-07-18,Premium
|
| 627 |
+
626,customer626@example.com,Customer 626,Australia,2024-08-28,Basic
|
| 628 |
+
627,customer627@example.com,Customer 627,USA,2024-01-23,Standard
|
| 629 |
+
628,customer628@example.com,Customer 628,USA,2024-11-21,Standard
|
| 630 |
+
629,customer629@example.com,Customer 629,Germany,2024-07-17,Standard
|
| 631 |
+
630,customer630@example.com,Customer 630,Canada,2024-07-10,Basic
|
| 632 |
+
631,customer631@example.com,Customer 631,Brazil,2024-05-09,Basic
|
| 633 |
+
632,customer632@example.com,Customer 632,Germany,2024-01-09,Standard
|
| 634 |
+
633,customer633@example.com,Customer 633,USA,2024-07-01,Basic
|
| 635 |
+
634,customer634@example.com,Customer 634,USA,2024-02-04,Standard
|
| 636 |
+
635,customer635@example.com,Customer 635,USA,2024-06-25,Basic
|
| 637 |
+
636,customer636@example.com,Customer 636,USA,2024-05-03,Standard
|
| 638 |
+
637,customer637@example.com,Customer 637,USA,2024-12-02,Standard
|
| 639 |
+
638,customer638@example.com,Customer 638,USA,2024-11-17,Premium
|
| 640 |
+
639,customer639@example.com,Customer 639,Germany,2024-02-23,Basic
|
| 641 |
+
640,customer640@example.com,Customer 640,USA,2024-10-24,Basic
|
| 642 |
+
641,customer641@example.com,Customer 641,Brazil,2024-06-19,Standard
|
| 643 |
+
642,customer642@example.com,Customer 642,Germany,2024-03-09,Standard
|
| 644 |
+
643,customer643@example.com,Customer 643,Canada,2024-01-23,Premium
|
| 645 |
+
644,customer644@example.com,Customer 644,USA,2024-06-29,Basic
|
| 646 |
+
645,customer645@example.com,Customer 645,Japan,2024-10-06,Basic
|
| 647 |
+
646,customer646@example.com,Customer 646,Germany,2024-06-22,Standard
|
| 648 |
+
647,customer647@example.com,Customer 647,Japan,2024-11-25,Basic
|
| 649 |
+
648,customer648@example.com,Customer 648,France,2024-03-30,Basic
|
| 650 |
+
649,customer649@example.com,Customer 649,Germany,2024-12-16,Standard
|
| 651 |
+
650,customer650@example.com,Customer 650,UK,2024-08-25,Premium
|
| 652 |
+
651,customer651@example.com,Customer 651,USA,2024-12-22,Standard
|
| 653 |
+
652,customer652@example.com,Customer 652,USA,2024-09-02,Standard
|
| 654 |
+
653,customer653@example.com,Customer 653,Brazil,2024-11-19,Standard
|
| 655 |
+
654,customer654@example.com,Customer 654,Germany,2024-04-03,Standard
|
| 656 |
+
655,customer655@example.com,Customer 655,Australia,2024-03-10,Standard
|
| 657 |
+
656,customer656@example.com,Customer 656,UK,2024-02-02,Standard
|
| 658 |
+
657,customer657@example.com,Customer 657,USA,2024-08-22,Standard
|
| 659 |
+
658,customer658@example.com,Customer 658,France,2024-01-19,Basic
|
| 660 |
+
659,customer659@example.com,Customer 659,USA,2024-05-30,Standard
|
| 661 |
+
660,customer660@example.com,Customer 660,USA,2024-04-13,Standard
|
| 662 |
+
661,customer661@example.com,Customer 661,Germany,2024-01-23,Standard
|
| 663 |
+
662,customer662@example.com,Customer 662,UK,2024-04-12,Premium
|
| 664 |
+
663,customer663@example.com,Customer 663,Brazil,2024-01-22,Premium
|
| 665 |
+
664,customer664@example.com,Customer 664,USA,2024-06-10,Standard
|
| 666 |
+
665,customer665@example.com,Customer 665,Australia,2024-06-07,Basic
|
| 667 |
+
666,customer666@example.com,Customer 666,France,2024-09-20,Premium
|
| 668 |
+
667,customer667@example.com,Customer 667,Australia,2024-07-22,Basic
|
| 669 |
+
668,customer668@example.com,Customer 668,USA,2024-10-05,Premium
|
| 670 |
+
669,customer669@example.com,Customer 669,Germany,2024-08-30,Standard
|
| 671 |
+
670,customer670@example.com,Customer 670,Germany,2024-05-09,Standard
|
| 672 |
+
671,customer671@example.com,Customer 671,UK,2024-01-19,Standard
|
| 673 |
+
672,customer672@example.com,Customer 672,Japan,2024-11-27,Standard
|
| 674 |
+
673,customer673@example.com,Customer 673,Brazil,2024-04-07,Standard
|
| 675 |
+
674,customer674@example.com,Customer 674,UK,2024-05-26,Standard
|
| 676 |
+
675,customer675@example.com,Customer 675,France,2024-07-01,Basic
|
| 677 |
+
676,customer676@example.com,Customer 676,France,2024-01-25,Standard
|
| 678 |
+
677,customer677@example.com,Customer 677,Canada,2024-12-01,Standard
|
| 679 |
+
678,customer678@example.com,Customer 678,Brazil,2024-06-18,Basic
|
| 680 |
+
679,customer679@example.com,Customer 679,USA,2024-05-19,Premium
|
| 681 |
+
680,customer680@example.com,Customer 680,USA,2024-03-04,Basic
|
| 682 |
+
681,customer681@example.com,Customer 681,France,2024-07-07,Standard
|
| 683 |
+
682,customer682@example.com,Customer 682,USA,2024-08-11,Basic
|
| 684 |
+
683,customer683@example.com,Customer 683,USA,2024-07-23,Standard
|
| 685 |
+
684,customer684@example.com,Customer 684,USA,2024-08-13,Basic
|
| 686 |
+
685,customer685@example.com,Customer 685,USA,2024-07-16,Standard
|
| 687 |
+
686,customer686@example.com,Customer 686,Germany,2024-06-22,Standard
|
| 688 |
+
687,customer687@example.com,Customer 687,France,2024-04-05,Standard
|
| 689 |
+
688,customer688@example.com,Customer 688,USA,2024-09-11,Standard
|
| 690 |
+
689,customer689@example.com,Customer 689,USA,2024-12-20,Basic
|
| 691 |
+
690,customer690@example.com,Customer 690,Canada,2024-09-11,Standard
|
| 692 |
+
691,customer691@example.com,Customer 691,Canada,2024-07-07,Standard
|
| 693 |
+
692,customer692@example.com,Customer 692,Germany,2024-09-22,Standard
|
| 694 |
+
693,customer693@example.com,Customer 693,Canada,2024-05-16,Standard
|
| 695 |
+
694,customer694@example.com,Customer 694,Brazil,2024-02-12,Standard
|
| 696 |
+
695,customer695@example.com,Customer 695,Australia,2024-08-05,Premium
|
| 697 |
+
696,customer696@example.com,Customer 696,France,2024-02-10,Standard
|
| 698 |
+
697,customer697@example.com,Customer 697,France,2024-08-08,Standard
|
| 699 |
+
698,customer698@example.com,Customer 698,Brazil,2024-11-04,Standard
|
| 700 |
+
699,customer699@example.com,Customer 699,UK,2024-04-02,Standard
|
| 701 |
+
700,customer700@example.com,Customer 700,Germany,2024-10-06,Basic
|
| 702 |
+
701,customer701@example.com,Customer 701,France,2024-05-30,Standard
|
| 703 |
+
702,customer702@example.com,Customer 702,Brazil,2024-06-13,Basic
|
| 704 |
+
703,customer703@example.com,Customer 703,Australia,2024-02-22,Basic
|
| 705 |
+
704,customer704@example.com,Customer 704,USA,2024-02-10,Premium
|
| 706 |
+
705,customer705@example.com,Customer 705,USA,2024-06-16,Premium
|
| 707 |
+
706,customer706@example.com,Customer 706,UK,2024-12-04,Basic
|
| 708 |
+
707,customer707@example.com,Customer 707,Canada,2024-05-31,Standard
|
| 709 |
+
708,customer708@example.com,Customer 708,Germany,2024-06-05,Standard
|
| 710 |
+
709,customer709@example.com,Customer 709,USA,2024-08-16,Standard
|
| 711 |
+
710,customer710@example.com,Customer 710,USA,2024-11-04,Standard
|
| 712 |
+
711,customer711@example.com,Customer 711,Canada,2024-08-06,Basic
|
| 713 |
+
712,customer712@example.com,Customer 712,Canada,2024-03-26,Standard
|
| 714 |
+
713,customer713@example.com,Customer 713,Brazil,2024-12-19,Standard
|
| 715 |
+
714,customer714@example.com,Customer 714,Germany,2024-08-15,Standard
|
| 716 |
+
715,customer715@example.com,Customer 715,Germany,2024-06-28,Standard
|
| 717 |
+
716,customer716@example.com,Customer 716,USA,2024-08-16,Standard
|
| 718 |
+
717,customer717@example.com,Customer 717,USA,2024-01-22,Standard
|
| 719 |
+
718,customer718@example.com,Customer 718,UK,2024-06-29,Basic
|
| 720 |
+
719,customer719@example.com,Customer 719,UK,2024-11-10,Standard
|
| 721 |
+
720,customer720@example.com,Customer 720,USA,2024-08-10,Basic
|
| 722 |
+
721,customer721@example.com,Customer 721,USA,2024-05-20,Basic
|
| 723 |
+
722,customer722@example.com,Customer 722,Brazil,2024-11-23,Standard
|
| 724 |
+
723,customer723@example.com,Customer 723,Japan,2024-01-30,Standard
|
| 725 |
+
724,customer724@example.com,Customer 724,France,2024-02-08,Premium
|
| 726 |
+
725,customer725@example.com,Customer 725,Brazil,2024-12-09,Premium
|
| 727 |
+
726,customer726@example.com,Customer 726,Brazil,2024-11-22,Premium
|
| 728 |
+
727,customer727@example.com,Customer 727,Canada,2024-07-26,Standard
|
| 729 |
+
728,customer728@example.com,Customer 728,USA,2024-07-05,Standard
|
| 730 |
+
729,customer729@example.com,Customer 729,USA,2024-09-19,Basic
|
| 731 |
+
730,customer730@example.com,Customer 730,Australia,2024-12-13,Standard
|
| 732 |
+
731,customer731@example.com,Customer 731,Germany,2024-03-22,Standard
|
| 733 |
+
732,customer732@example.com,Customer 732,France,2024-01-16,Premium
|
| 734 |
+
733,customer733@example.com,Customer 733,Brazil,2024-03-14,Standard
|
| 735 |
+
734,customer734@example.com,Customer 734,USA,2024-11-07,Standard
|
| 736 |
+
735,customer735@example.com,Customer 735,France,2024-12-13,Standard
|
| 737 |
+
736,customer736@example.com,Customer 736,France,2024-08-12,Basic
|
| 738 |
+
737,customer737@example.com,Customer 737,Germany,2024-01-18,Standard
|
| 739 |
+
738,customer738@example.com,Customer 738,USA,2024-03-05,Basic
|
| 740 |
+
739,customer739@example.com,Customer 739,UK,2024-02-04,Standard
|
| 741 |
+
740,customer740@example.com,Customer 740,UK,2024-04-30,Standard
|
| 742 |
+
741,customer741@example.com,Customer 741,Canada,2024-11-26,Premium
|
| 743 |
+
742,customer742@example.com,Customer 742,Japan,2024-07-06,Standard
|
| 744 |
+
743,customer743@example.com,Customer 743,UK,2024-07-04,Standard
|
| 745 |
+
744,customer744@example.com,Customer 744,Canada,2024-07-15,Premium
|
| 746 |
+
745,customer745@example.com,Customer 745,USA,2024-10-17,Standard
|
| 747 |
+
746,customer746@example.com,Customer 746,Brazil,2024-01-17,Premium
|
| 748 |
+
747,customer747@example.com,Customer 747,Australia,2024-11-05,Premium
|
| 749 |
+
748,customer748@example.com,Customer 748,Germany,2024-03-19,Basic
|
| 750 |
+
749,customer749@example.com,Customer 749,Germany,2024-12-13,Basic
|
| 751 |
+
750,customer750@example.com,Customer 750,UK,2024-08-18,Standard
|
| 752 |
+
751,customer751@example.com,Customer 751,UK,2024-07-08,Standard
|
| 753 |
+
752,customer752@example.com,Customer 752,Brazil,2024-07-09,Basic
|
| 754 |
+
753,customer753@example.com,Customer 753,UK,2024-08-15,Standard
|
| 755 |
+
754,customer754@example.com,Customer 754,Germany,2024-02-09,Basic
|
| 756 |
+
755,customer755@example.com,Customer 755,Brazil,2024-10-20,Standard
|
| 757 |
+
756,customer756@example.com,Customer 756,France,2024-03-11,Premium
|
| 758 |
+
757,customer757@example.com,Customer 757,Germany,2024-09-28,Premium
|
| 759 |
+
758,customer758@example.com,Customer 758,UK,2024-07-06,Basic
|
| 760 |
+
759,customer759@example.com,Customer 759,USA,2024-07-22,Standard
|
| 761 |
+
760,customer760@example.com,Customer 760,UK,2024-06-09,Standard
|
| 762 |
+
761,customer761@example.com,Customer 761,Australia,2024-11-28,Standard
|
| 763 |
+
762,customer762@example.com,Customer 762,France,2024-05-22,Standard
|
| 764 |
+
763,customer763@example.com,Customer 763,Australia,2024-05-07,Standard
|
| 765 |
+
764,customer764@example.com,Customer 764,USA,2024-02-28,Basic
|
| 766 |
+
765,customer765@example.com,Customer 765,Germany,2024-01-14,Basic
|
| 767 |
+
766,customer766@example.com,Customer 766,Brazil,2024-04-05,Standard
|
| 768 |
+
767,customer767@example.com,Customer 767,UK,2024-09-12,Premium
|
| 769 |
+
768,customer768@example.com,Customer 768,Canada,2024-09-22,Premium
|
| 770 |
+
769,customer769@example.com,Customer 769,USA,2024-07-17,Basic
|
| 771 |
+
770,customer770@example.com,Customer 770,Brazil,2024-10-14,Basic
|
| 772 |
+
771,customer771@example.com,Customer 771,France,2024-03-01,Standard
|
| 773 |
+
772,customer772@example.com,Customer 772,USA,2024-05-14,Basic
|
| 774 |
+
773,customer773@example.com,Customer 773,USA,2024-05-13,Premium
|
| 775 |
+
774,customer774@example.com,Customer 774,Germany,2024-12-26,Basic
|
| 776 |
+
775,customer775@example.com,Customer 775,Germany,2024-08-16,Standard
|
| 777 |
+
776,customer776@example.com,Customer 776,USA,2024-04-19,Basic
|
| 778 |
+
777,customer777@example.com,Customer 777,Brazil,2024-11-09,Premium
|
| 779 |
+
778,customer778@example.com,Customer 778,Brazil,2024-05-26,Basic
|
| 780 |
+
779,customer779@example.com,Customer 779,Germany,2024-12-21,Basic
|
| 781 |
+
780,customer780@example.com,Customer 780,USA,2024-09-08,Standard
|
| 782 |
+
781,customer781@example.com,Customer 781,Japan,2024-04-12,Basic
|
| 783 |
+
782,customer782@example.com,Customer 782,Germany,2024-03-03,Standard
|
| 784 |
+
783,customer783@example.com,Customer 783,Canada,2024-03-10,Standard
|
| 785 |
+
784,customer784@example.com,Customer 784,Germany,2024-02-07,Basic
|
| 786 |
+
785,customer785@example.com,Customer 785,USA,2024-08-19,Standard
|
| 787 |
+
786,customer786@example.com,Customer 786,Japan,2024-03-29,Basic
|
| 788 |
+
787,customer787@example.com,Customer 787,Brazil,2024-12-31,Basic
|
| 789 |
+
788,customer788@example.com,Customer 788,USA,2024-08-15,Standard
|
| 790 |
+
789,customer789@example.com,Customer 789,Germany,2024-02-14,Basic
|
| 791 |
+
790,customer790@example.com,Customer 790,UK,2024-12-15,Standard
|
| 792 |
+
791,customer791@example.com,Customer 791,Brazil,2024-06-12,Standard
|
| 793 |
+
792,customer792@example.com,Customer 792,Germany,2024-12-07,Basic
|
| 794 |
+
793,customer793@example.com,Customer 793,Japan,2024-06-26,Standard
|
| 795 |
+
794,customer794@example.com,Customer 794,Japan,2024-12-29,Standard
|
| 796 |
+
795,customer795@example.com,Customer 795,USA,2024-02-03,Premium
|
| 797 |
+
796,customer796@example.com,Customer 796,Australia,2024-10-08,Standard
|
| 798 |
+
797,customer797@example.com,Customer 797,UK,2024-10-04,Standard
|
| 799 |
+
798,customer798@example.com,Customer 798,Brazil,2024-05-28,Premium
|
| 800 |
+
799,customer799@example.com,Customer 799,Germany,2024-06-02,Standard
|
| 801 |
+
800,customer800@example.com,Customer 800,Australia,2024-03-21,Standard
|
| 802 |
+
801,customer801@example.com,Customer 801,USA,2024-12-30,Standard
|
| 803 |
+
802,customer802@example.com,Customer 802,USA,2024-12-29,Standard
|
| 804 |
+
803,customer803@example.com,Customer 803,France,2024-12-24,Basic
|
| 805 |
+
804,customer804@example.com,Customer 804,Brazil,2024-11-22,Standard
|
| 806 |
+
805,customer805@example.com,Customer 805,Germany,2024-03-30,Standard
|
| 807 |
+
806,customer806@example.com,Customer 806,USA,2024-07-04,Basic
|
| 808 |
+
807,customer807@example.com,Customer 807,Germany,2024-09-17,Basic
|
| 809 |
+
808,customer808@example.com,Customer 808,UK,2024-04-24,Basic
|
| 810 |
+
809,customer809@example.com,Customer 809,Germany,2024-03-03,Premium
|
| 811 |
+
810,customer810@example.com,Customer 810,Germany,2024-04-12,Basic
|
| 812 |
+
811,customer811@example.com,Customer 811,Germany,2024-03-12,Basic
|
| 813 |
+
812,customer812@example.com,Customer 812,UK,2024-05-01,Basic
|
| 814 |
+
813,customer813@example.com,Customer 813,USA,2024-09-09,Basic
|
| 815 |
+
814,customer814@example.com,Customer 814,Canada,2024-01-14,Basic
|
| 816 |
+
815,customer815@example.com,Customer 815,France,2024-07-03,Premium
|
| 817 |
+
816,customer816@example.com,Customer 816,USA,2024-10-10,Basic
|
| 818 |
+
817,customer817@example.com,Customer 817,Australia,2024-10-20,Standard
|
| 819 |
+
818,customer818@example.com,Customer 818,USA,2024-07-07,Basic
|
| 820 |
+
819,customer819@example.com,Customer 819,Canada,2024-08-27,Basic
|
| 821 |
+
820,customer820@example.com,Customer 820,Canada,2024-10-09,Basic
|
| 822 |
+
821,customer821@example.com,Customer 821,Australia,2024-03-07,Basic
|
| 823 |
+
822,customer822@example.com,Customer 822,UK,2024-11-09,Standard
|
| 824 |
+
823,customer823@example.com,Customer 823,France,2024-02-14,Standard
|
| 825 |
+
824,customer824@example.com,Customer 824,Australia,2024-02-03,Standard
|
| 826 |
+
825,customer825@example.com,Customer 825,Brazil,2024-06-07,Standard
|
| 827 |
+
826,customer826@example.com,Customer 826,Germany,2024-07-22,Standard
|
| 828 |
+
827,customer827@example.com,Customer 827,USA,2024-09-02,Standard
|
| 829 |
+
828,customer828@example.com,Customer 828,Germany,2024-09-26,Basic
|
| 830 |
+
829,customer829@example.com,Customer 829,France,2024-07-29,Premium
|
| 831 |
+
830,customer830@example.com,Customer 830,Japan,2024-07-28,Standard
|
| 832 |
+
831,customer831@example.com,Customer 831,Japan,2024-10-21,Standard
|
| 833 |
+
832,customer832@example.com,Customer 832,UK,2024-02-07,Basic
|
| 834 |
+
833,customer833@example.com,Customer 833,Germany,2024-03-05,Standard
|
| 835 |
+
834,customer834@example.com,Customer 834,Germany,2024-06-11,Basic
|
| 836 |
+
835,customer835@example.com,Customer 835,Canada,2024-11-24,Standard
|
| 837 |
+
836,customer836@example.com,Customer 836,UK,2024-02-07,Premium
|
| 838 |
+
837,customer837@example.com,Customer 837,France,2024-08-18,Basic
|
| 839 |
+
838,customer838@example.com,Customer 838,USA,2024-08-26,Basic
|
| 840 |
+
839,customer839@example.com,Customer 839,Germany,2024-12-14,Basic
|
| 841 |
+
840,customer840@example.com,Customer 840,Brazil,2024-09-21,Standard
|
| 842 |
+
841,customer841@example.com,Customer 841,UK,2024-06-25,Basic
|
| 843 |
+
842,customer842@example.com,Customer 842,Canada,2024-03-06,Standard
|
| 844 |
+
843,customer843@example.com,Customer 843,France,2024-10-09,Premium
|
| 845 |
+
844,customer844@example.com,Customer 844,Japan,2024-11-23,Standard
|
| 846 |
+
845,customer845@example.com,Customer 845,Japan,2024-10-27,Standard
|
| 847 |
+
846,customer846@example.com,Customer 846,Japan,2024-04-03,Standard
|
| 848 |
+
847,customer847@example.com,Customer 847,UK,2024-03-07,Standard
|
| 849 |
+
848,customer848@example.com,Customer 848,UK,2024-08-09,Standard
|
| 850 |
+
849,customer849@example.com,Customer 849,Canada,2024-09-14,Basic
|
| 851 |
+
850,customer850@example.com,Customer 850,Australia,2024-01-29,Standard
|
| 852 |
+
851,customer851@example.com,Customer 851,Japan,2024-03-04,Standard
|
| 853 |
+
852,customer852@example.com,Customer 852,USA,2024-09-22,Standard
|
| 854 |
+
853,customer853@example.com,Customer 853,USA,2024-03-19,Standard
|
| 855 |
+
854,customer854@example.com,Customer 854,France,2024-06-04,Standard
|
| 856 |
+
855,customer855@example.com,Customer 855,Brazil,2024-03-25,Basic
|
| 857 |
+
856,customer856@example.com,Customer 856,Brazil,2024-03-23,Premium
|
| 858 |
+
857,customer857@example.com,Customer 857,Canada,2024-06-14,Premium
|
| 859 |
+
858,customer858@example.com,Customer 858,UK,2024-12-29,Basic
|
| 860 |
+
859,customer859@example.com,Customer 859,USA,2024-04-25,Standard
|
| 861 |
+
860,customer860@example.com,Customer 860,France,2024-06-26,Premium
|
| 862 |
+
861,customer861@example.com,Customer 861,Japan,2024-09-22,Basic
|
| 863 |
+
862,customer862@example.com,Customer 862,UK,2024-05-25,Standard
|
| 864 |
+
863,customer863@example.com,Customer 863,Canada,2024-02-10,Premium
|
| 865 |
+
864,customer864@example.com,Customer 864,Brazil,2024-05-08,Basic
|
| 866 |
+
865,customer865@example.com,Customer 865,USA,2024-04-10,Standard
|
| 867 |
+
866,customer866@example.com,Customer 866,Australia,2024-11-21,Basic
|
| 868 |
+
867,customer867@example.com,Customer 867,USA,2024-10-09,Premium
|
| 869 |
+
868,customer868@example.com,Customer 868,UK,2024-05-20,Standard
|
| 870 |
+
869,customer869@example.com,Customer 869,USA,2024-03-05,Standard
|
| 871 |
+
870,customer870@example.com,Customer 870,Germany,2024-11-16,Basic
|
| 872 |
+
871,customer871@example.com,Customer 871,Germany,2024-06-04,Standard
|
| 873 |
+
872,customer872@example.com,Customer 872,Australia,2024-11-10,Basic
|
| 874 |
+
873,customer873@example.com,Customer 873,USA,2024-09-30,Standard
|
| 875 |
+
874,customer874@example.com,Customer 874,USA,2024-02-17,Standard
|
| 876 |
+
875,customer875@example.com,Customer 875,Japan,2024-09-14,Basic
|
| 877 |
+
876,customer876@example.com,Customer 876,France,2024-11-24,Standard
|
| 878 |
+
877,customer877@example.com,Customer 877,USA,2024-03-27,Standard
|
| 879 |
+
878,customer878@example.com,Customer 878,Brazil,2024-10-30,Standard
|
| 880 |
+
879,customer879@example.com,Customer 879,USA,2024-10-24,Basic
|
| 881 |
+
880,customer880@example.com,Customer 880,Germany,2024-03-19,Standard
|
| 882 |
+
881,customer881@example.com,Customer 881,USA,2024-03-28,Basic
|
| 883 |
+
882,customer882@example.com,Customer 882,USA,2024-12-03,Basic
|
| 884 |
+
883,customer883@example.com,Customer 883,USA,2024-11-15,Premium
|
| 885 |
+
884,customer884@example.com,Customer 884,Australia,2024-11-05,Standard
|
| 886 |
+
885,customer885@example.com,Customer 885,Brazil,2024-06-21,Premium
|
| 887 |
+
886,customer886@example.com,Customer 886,Canada,2024-10-15,Standard
|
| 888 |
+
887,customer887@example.com,Customer 887,USA,2024-01-22,Basic
|
| 889 |
+
888,customer888@example.com,Customer 888,UK,2024-01-15,Premium
|
| 890 |
+
889,customer889@example.com,Customer 889,UK,2024-02-11,Basic
|
| 891 |
+
890,customer890@example.com,Customer 890,France,2024-01-24,Basic
|
| 892 |
+
891,customer891@example.com,Customer 891,France,2024-11-24,Basic
|
| 893 |
+
892,customer892@example.com,Customer 892,UK,2024-10-22,Standard
|
| 894 |
+
893,customer893@example.com,Customer 893,USA,2024-05-15,Premium
|
| 895 |
+
894,customer894@example.com,Customer 894,Japan,2024-11-29,Premium
|
| 896 |
+
895,customer895@example.com,Customer 895,USA,2024-04-17,Standard
|
| 897 |
+
896,customer896@example.com,Customer 896,UK,2024-10-19,Basic
|
| 898 |
+
897,customer897@example.com,Customer 897,Germany,2024-08-01,Premium
|
| 899 |
+
898,customer898@example.com,Customer 898,USA,2024-11-12,Standard
|
| 900 |
+
899,customer899@example.com,Customer 899,France,2024-11-23,Basic
|
| 901 |
+
900,customer900@example.com,Customer 900,France,2024-01-16,Premium
|
| 902 |
+
901,customer901@example.com,Customer 901,Brazil,2024-09-11,Basic
|
| 903 |
+
902,customer902@example.com,Customer 902,USA,2024-11-17,Basic
|
| 904 |
+
903,customer903@example.com,Customer 903,Brazil,2024-10-06,Premium
|
| 905 |
+
904,customer904@example.com,Customer 904,France,2024-05-28,Basic
|
| 906 |
+
905,customer905@example.com,Customer 905,USA,2024-11-24,Premium
|
| 907 |
+
906,customer906@example.com,Customer 906,Germany,2024-06-03,Standard
|
| 908 |
+
907,customer907@example.com,Customer 907,Canada,2024-09-04,Premium
|
| 909 |
+
908,customer908@example.com,Customer 908,Canada,2024-05-05,Basic
|
| 910 |
+
909,customer909@example.com,Customer 909,USA,2024-12-16,Standard
|
| 911 |
+
910,customer910@example.com,Customer 910,France,2024-07-26,Basic
|
| 912 |
+
911,customer911@example.com,Customer 911,Germany,2024-06-01,Standard
|
| 913 |
+
912,customer912@example.com,Customer 912,Brazil,2024-08-20,Standard
|
| 914 |
+
913,customer913@example.com,Customer 913,USA,2024-02-07,Standard
|
| 915 |
+
914,customer914@example.com,Customer 914,Australia,2024-12-18,Basic
|
| 916 |
+
915,customer915@example.com,Customer 915,France,2024-01-31,Basic
|
| 917 |
+
916,customer916@example.com,Customer 916,UK,2024-03-21,Premium
|
| 918 |
+
917,customer917@example.com,Customer 917,France,2024-08-13,Premium
|
| 919 |
+
918,customer918@example.com,Customer 918,France,2024-07-31,Basic
|
| 920 |
+
919,customer919@example.com,Customer 919,Canada,2024-09-04,Standard
|
| 921 |
+
920,customer920@example.com,Customer 920,Canada,2024-08-25,Standard
|
| 922 |
+
921,customer921@example.com,Customer 921,France,2024-04-14,Basic
|
| 923 |
+
922,customer922@example.com,Customer 922,Japan,2024-06-23,Standard
|
| 924 |
+
923,customer923@example.com,Customer 923,France,2024-11-06,Premium
|
| 925 |
+
924,customer924@example.com,Customer 924,Brazil,2024-03-14,Standard
|
| 926 |
+
925,customer925@example.com,Customer 925,France,2024-06-09,Premium
|
| 927 |
+
926,customer926@example.com,Customer 926,UK,2024-06-12,Standard
|
| 928 |
+
927,customer927@example.com,Customer 927,UK,2024-06-25,Standard
|
| 929 |
+
928,customer928@example.com,Customer 928,France,2024-07-23,Standard
|
| 930 |
+
929,customer929@example.com,Customer 929,Canada,2024-03-07,Basic
|
| 931 |
+
930,customer930@example.com,Customer 930,USA,2024-07-08,Basic
|
| 932 |
+
931,customer931@example.com,Customer 931,USA,2024-09-20,Basic
|
| 933 |
+
932,customer932@example.com,Customer 932,Canada,2024-10-14,Basic
|
| 934 |
+
933,customer933@example.com,Customer 933,USA,2024-02-24,Standard
|
| 935 |
+
934,customer934@example.com,Customer 934,USA,2024-06-12,Standard
|
| 936 |
+
935,customer935@example.com,Customer 935,Germany,2024-05-03,Standard
|
| 937 |
+
936,customer936@example.com,Customer 936,Brazil,2024-08-26,Basic
|
| 938 |
+
937,customer937@example.com,Customer 937,Germany,2024-03-03,Standard
|
| 939 |
+
938,customer938@example.com,Customer 938,Brazil,2024-05-16,Premium
|
| 940 |
+
939,customer939@example.com,Customer 939,Japan,2024-08-18,Basic
|
| 941 |
+
940,customer940@example.com,Customer 940,USA,2024-05-06,Basic
|
| 942 |
+
941,customer941@example.com,Customer 941,Australia,2024-03-13,Standard
|
| 943 |
+
942,customer942@example.com,Customer 942,Germany,2024-02-19,Premium
|
| 944 |
+
943,customer943@example.com,Customer 943,Australia,2024-01-26,Standard
|
| 945 |
+
944,customer944@example.com,Customer 944,Canada,2024-05-28,Standard
|
| 946 |
+
945,customer945@example.com,Customer 945,UK,2024-07-15,Standard
|
| 947 |
+
946,customer946@example.com,Customer 946,USA,2024-11-11,Basic
|
| 948 |
+
947,customer947@example.com,Customer 947,Brazil,2024-08-02,Basic
|
| 949 |
+
948,customer948@example.com,Customer 948,USA,2024-05-07,Basic
|
| 950 |
+
949,customer949@example.com,Customer 949,Brazil,2024-03-22,Premium
|
| 951 |
+
950,customer950@example.com,Customer 950,Japan,2024-06-16,Basic
|
| 952 |
+
951,customer951@example.com,Customer 951,Canada,2024-10-22,Standard
|
| 953 |
+
952,customer952@example.com,Customer 952,Brazil,2024-06-09,Standard
|
| 954 |
+
953,customer953@example.com,Customer 953,Brazil,2024-04-07,Basic
|
| 955 |
+
954,customer954@example.com,Customer 954,Australia,2024-03-22,Basic
|
| 956 |
+
955,customer955@example.com,Customer 955,UK,2024-09-12,Basic
|
| 957 |
+
956,customer956@example.com,Customer 956,Australia,2024-09-20,Basic
|
| 958 |
+
957,customer957@example.com,Customer 957,USA,2024-08-27,Premium
|
| 959 |
+
958,customer958@example.com,Customer 958,Germany,2024-09-12,Premium
|
| 960 |
+
959,customer959@example.com,Customer 959,Germany,2024-06-06,Standard
|
| 961 |
+
960,customer960@example.com,Customer 960,Canada,2024-09-11,Premium
|
| 962 |
+
961,customer961@example.com,Customer 961,Canada,2024-01-12,Premium
|
| 963 |
+
962,customer962@example.com,Customer 962,France,2024-02-16,Basic
|
| 964 |
+
963,customer963@example.com,Customer 963,Australia,2024-07-20,Standard
|
| 965 |
+
964,customer964@example.com,Customer 964,Brazil,2024-09-15,Standard
|
| 966 |
+
965,customer965@example.com,Customer 965,USA,2024-08-22,Standard
|
| 967 |
+
966,customer966@example.com,Customer 966,USA,2024-05-03,Standard
|
| 968 |
+
967,customer967@example.com,Customer 967,USA,2024-04-20,Basic
|
| 969 |
+
968,customer968@example.com,Customer 968,Japan,2024-10-25,Premium
|
| 970 |
+
969,customer969@example.com,Customer 969,Germany,2024-06-29,Standard
|
| 971 |
+
970,customer970@example.com,Customer 970,Brazil,2024-01-25,Standard
|
| 972 |
+
971,customer971@example.com,Customer 971,USA,2024-01-26,Standard
|
| 973 |
+
972,customer972@example.com,Customer 972,USA,2024-05-24,Standard
|
| 974 |
+
973,customer973@example.com,Customer 973,Australia,2024-09-10,Standard
|
| 975 |
+
974,customer974@example.com,Customer 974,Brazil,2024-11-01,Standard
|
| 976 |
+
975,customer975@example.com,Customer 975,UK,2024-11-30,Basic
|
| 977 |
+
976,customer976@example.com,Customer 976,UK,2024-12-10,Standard
|
| 978 |
+
977,customer977@example.com,Customer 977,USA,2024-08-28,Standard
|
| 979 |
+
978,customer978@example.com,Customer 978,Brazil,2024-05-26,Standard
|
| 980 |
+
979,customer979@example.com,Customer 979,UK,2024-10-01,Basic
|
| 981 |
+
980,customer980@example.com,Customer 980,Germany,2024-01-05,Basic
|
| 982 |
+
981,customer981@example.com,Customer 981,USA,2024-02-25,Premium
|
| 983 |
+
982,customer982@example.com,Customer 982,Japan,2024-08-08,Basic
|
| 984 |
+
983,customer983@example.com,Customer 983,USA,2024-03-09,Basic
|
| 985 |
+
984,customer984@example.com,Customer 984,Germany,2024-05-15,Basic
|
| 986 |
+
985,customer985@example.com,Customer 985,Canada,2024-07-06,Premium
|
| 987 |
+
986,customer986@example.com,Customer 986,Canada,2024-07-25,Premium
|
| 988 |
+
987,customer987@example.com,Customer 987,Brazil,2024-07-06,Standard
|
| 989 |
+
988,customer988@example.com,Customer 988,UK,2024-01-24,Standard
|
| 990 |
+
989,customer989@example.com,Customer 989,Canada,2024-07-24,Standard
|
| 991 |
+
990,customer990@example.com,Customer 990,USA,2024-01-27,Standard
|
| 992 |
+
991,customer991@example.com,Customer 991,UK,2024-10-18,Basic
|
| 993 |
+
992,customer992@example.com,Customer 992,USA,2024-10-14,Basic
|
| 994 |
+
993,customer993@example.com,Customer 993,Germany,2024-04-09,Premium
|
| 995 |
+
994,customer994@example.com,Customer 994,UK,2024-07-04,Basic
|
| 996 |
+
995,customer995@example.com,Customer 995,Brazil,2024-10-10,Basic
|
| 997 |
+
996,customer996@example.com,Customer 996,USA,2024-05-27,Standard
|
| 998 |
+
997,customer997@example.com,Customer 997,UK,2024-02-07,Basic
|
| 999 |
+
998,customer998@example.com,Customer 998,UK,2024-07-16,Standard
|
| 1000 |
+
999,customer999@example.com,Customer 999,Brazil,2024-09-15,Basic
|
| 1001 |
+
1000,customer1000@example.com,Customer 1000,Japan,2024-08-18,Basic
|
data/order_items.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/orders.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/products.csv
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
product_id,name,category,price,cost
|
| 2 |
+
1,Product 1,Electronics,91.81,51.17
|
| 3 |
+
2,Product 2,Clothing,72.2,55.89
|
| 4 |
+
3,Product 3,Home,392.75,66.43
|
| 5 |
+
4,Product 4,Sports,141.69,161.16
|
| 6 |
+
5,Product 5,Books,444.34,141.64
|
| 7 |
+
6,Product 6,Beauty,388.0,148.39
|
| 8 |
+
7,Product 7,Electronics,24.38,67.02
|
| 9 |
+
8,Product 8,Clothing,405.48,58.03
|
| 10 |
+
9,Product 9,Home,143.27,19.56
|
| 11 |
+
10,Product 10,Sports,41.3,44.53
|
| 12 |
+
11,Product 11,Books,359.04,157.09
|
| 13 |
+
12,Product 12,Beauty,292.56,119.02
|
| 14 |
+
13,Product 13,Electronics,47.76,35.31
|
| 15 |
+
14,Product 14,Clothing,233.05,37.05
|
| 16 |
+
15,Product 15,Home,186.46,95.88
|
| 17 |
+
16,Product 16,Sports,254.81,84.27
|
| 18 |
+
17,Product 17,Books,287.77,109.51
|
| 19 |
+
18,Product 18,Beauty,190.17,193.1
|
| 20 |
+
19,Product 19,Electronics,135.01,45.49
|
| 21 |
+
20,Product 20,Clothing,60.42,65.12
|
| 22 |
+
21,Product 21,Home,291.22,56.68
|
| 23 |
+
22,Product 22,Sports,364.16,28.38
|
| 24 |
+
23,Product 23,Books,121.92,35.73
|
| 25 |
+
24,Product 24,Beauty,259.32,138.78
|
| 26 |
+
25,Product 25,Electronics,31.58,166.15
|
| 27 |
+
26,Product 26,Clothing,432.83,140.89
|
| 28 |
+
27,Product 27,Home,129.83,12.86
|
| 29 |
+
28,Product 28,Sports,241.16,168.01
|
| 30 |
+
29,Product 29,Books,197.66,68.92
|
| 31 |
+
30,Product 30,Beauty,83.54,22.79
|
| 32 |
+
31,Product 31,Electronics,466.27,53.4
|
| 33 |
+
32,Product 32,Clothing,430.17,74.37
|
| 34 |
+
33,Product 33,Home,280.9,105.12
|
| 35 |
+
34,Product 34,Sports,457.83,137.05
|
| 36 |
+
35,Product 35,Books,372.93,55.73
|
| 37 |
+
36,Product 36,Beauty,215.49,198.18
|
| 38 |
+
37,Product 37,Electronics,167.68,11.06
|
| 39 |
+
38,Product 38,Clothing,213.97,83.86
|
| 40 |
+
39,Product 39,Home,362.94,93.18
|
| 41 |
+
40,Product 40,Sports,142.92,150.88
|
| 42 |
+
41,Product 41,Books,48.16,53.72
|
| 43 |
+
42,Product 42,Beauty,192.68,95.1
|
| 44 |
+
43,Product 43,Electronics,256.0,161.76
|
| 45 |
+
44,Product 44,Clothing,451.95,32.26
|
| 46 |
+
45,Product 45,Home,97.88,7.33
|
| 47 |
+
46,Product 46,Sports,404.13,166.92
|
| 48 |
+
47,Product 47,Books,490.89,196.6
|
| 49 |
+
48,Product 48,Beauty,477.5,30.49
|
| 50 |
+
49,Product 49,Electronics,43.77,165.62
|
| 51 |
+
50,Product 50,Clothing,237.9,77.59
|
| 52 |
+
51,Product 51,Home,148.33,127.91
|
| 53 |
+
52,Product 52,Sports,423.97,130.71
|
| 54 |
+
53,Product 53,Books,170.38,118.55
|
| 55 |
+
54,Product 54,Beauty,281.01,55.47
|
| 56 |
+
55,Product 55,Electronics,13.9,163.49
|
| 57 |
+
56,Product 56,Clothing,108.33,9.25
|
| 58 |
+
57,Product 57,Home,286.27,17.57
|
| 59 |
+
58,Product 58,Sports,158.92,180.99
|
| 60 |
+
59,Product 59,Books,315.13,91.47
|
| 61 |
+
60,Product 60,Beauty,237.32,30.11
|
| 62 |
+
61,Product 61,Electronics,299.93,181.49
|
| 63 |
+
62,Product 62,Clothing,251.75,166.72
|
| 64 |
+
63,Product 63,Home,388.58,69.65
|
| 65 |
+
64,Product 64,Sports,105.76,13.33
|
| 66 |
+
65,Product 65,Books,451.22,94.89
|
| 67 |
+
66,Product 66,Beauty,382.64,37.76
|
| 68 |
+
67,Product 67,Electronics,130.11,116.91
|
| 69 |
+
68,Product 68,Clothing,13.13,165.23
|
| 70 |
+
69,Product 69,Home,210.92,82.02
|
| 71 |
+
70,Product 70,Sports,124.17,10.75
|
| 72 |
+
71,Product 71,Books,179.75,138.23
|
| 73 |
+
72,Product 72,Beauty,421.39,38.7
|
| 74 |
+
73,Product 73,Electronics,439.83,46.87
|
| 75 |
+
74,Product 74,Clothing,475.99,41.49
|
| 76 |
+
75,Product 75,Home,10.72,59.57
|
| 77 |
+
76,Product 76,Sports,332.08,177.27
|
| 78 |
+
77,Product 77,Books,426.01,11.76
|
| 79 |
+
78,Product 78,Beauty,366.34,125.74
|
| 80 |
+
79,Product 79,Electronics,60.94,52.93
|
| 81 |
+
80,Product 80,Clothing,269.61,62.55
|
| 82 |
+
81,Product 81,Home,126.7,85.34
|
| 83 |
+
82,Product 82,Sports,251.09,112.38
|
| 84 |
+
83,Product 83,Books,39.35,16.89
|
| 85 |
+
84,Product 84,Beauty,498.51,59.56
|
| 86 |
+
85,Product 85,Electronics,358.71,31.76
|
| 87 |
+
86,Product 86,Clothing,55.58,43.89
|
| 88 |
+
87,Product 87,Home,461.42,177.51
|
| 89 |
+
88,Product 88,Sports,449.67,107.53
|
| 90 |
+
89,Product 89,Books,264.68,128.0
|
| 91 |
+
90,Product 90,Beauty,353.41,161.42
|
| 92 |
+
91,Product 91,Electronics,192.52,160.0
|
| 93 |
+
92,Product 92,Clothing,487.53,197.93
|
| 94 |
+
93,Product 93,Home,51.6,157.47
|
| 95 |
+
94,Product 94,Sports,56.83,75.03
|
| 96 |
+
95,Product 95,Books,75.42,111.18
|
| 97 |
+
96,Product 96,Beauty,411.78,99.51
|
| 98 |
+
97,Product 97,Electronics,46.67,182.97
|
| 99 |
+
98,Product 98,Clothing,288.23,102.97
|
| 100 |
+
99,Product 99,Home,223.14,80.73
|
| 101 |
+
100,Product 100,Sports,482.47,40.06
|
index.html
CHANGED
|
@@ -1,19 +1,292 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<title>SQL Query Playground — DuckDB in your browser</title>
|
| 7 |
+
<meta name="description" content="Write and run real SQL against a seeded warehouse — DuckDB compiled to WebAssembly, executed entirely in your browser. 55 tested templates included.">
|
| 8 |
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🦆</text></svg>">
|
| 9 |
+
<style>
|
| 10 |
+
@font-face {
|
| 11 |
+
font-family: "Space Grotesk";
|
| 12 |
+
src: url("https://raw.githubusercontent.com/Reaver1000/sql-query-builder/master/assets/fonts/SpaceGrotesk.woff2") format("woff2");
|
| 13 |
+
font-display: swap;
|
| 14 |
+
}
|
| 15 |
+
:root {
|
| 16 |
+
--bg: #0d1117; --panel: #161b22; --border: #2b3442; --text: #e6edf3;
|
| 17 |
+
--muted: #93a0b4; --accent: #7ee787; --accent2: #79c0ff; --err: #ff7b72;
|
| 18 |
+
}
|
| 19 |
+
* { box-sizing: border-box; }
|
| 20 |
+
body {
|
| 21 |
+
margin: 0; background: var(--bg); color: var(--text);
|
| 22 |
+
font-family: "Space Grotesk", system-ui, sans-serif; letter-spacing: -0.2px;
|
| 23 |
+
}
|
| 24 |
+
header { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; padding: 18px 22px 0; }
|
| 25 |
+
header h1 { font-size: 1.35rem; margin: 0; letter-spacing: -0.5px; }
|
| 26 |
+
header .tag { color: var(--muted); font-size: .85rem; }
|
| 27 |
+
main { display: grid; grid-template-columns: 280px 1fr; gap: 16px; padding: 16px 22px 30px; }
|
| 28 |
+
aside, section.panel { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; }
|
| 29 |
+
aside { padding: 14px; max-height: 74vh; overflow: auto; }
|
| 30 |
+
aside h2 { font-size: .8rem; text-transform: uppercase; letter-spacing: .8px; color: var(--muted); margin: 4px 0 8px; }
|
| 31 |
+
details { margin-bottom: 6px; }
|
| 32 |
+
summary { cursor: pointer; padding: 7px 10px; border-radius: 8px; background: #1c2330; border: 1px solid var(--border); font-weight: 600; font-size: .9rem; }
|
| 33 |
+
summary:hover { background: #232b3b; }
|
| 34 |
+
.cols { padding: 6px 4px 0 10px; font-size: .78rem; color: var(--muted); line-height: 1.7; }
|
| 35 |
+
.cols b { color: var(--text); font-weight: 600; }
|
| 36 |
+
.cols i { font-style: normal; color: var(--accent2); font-size: .72rem; }
|
| 37 |
+
#templates h2 { margin-top: 16px; }
|
| 38 |
+
.tpl-item { display: block; width: 100%; text-align: left; cursor: pointer; color: var(--text);
|
| 39 |
+
background: none; border: none; font: inherit; font-size: .85rem; padding: 5px 10px 5px 18px; border-radius: 6px; }
|
| 40 |
+
.tpl-item:hover { background: #1f2637; color: var(--accent); }
|
| 41 |
+
.tpl-desc { display: block; font-size: .72rem; color: var(--muted); padding: 0 10px 4px 18px; }
|
| 42 |
+
.editorwrap { padding: 14px; }
|
| 43 |
+
textarea#sql {
|
| 44 |
+
width: 100%; min-height: 180px; resize: vertical; background: #0b0e14; color: #c9e1b8;
|
| 45 |
+
border: 1px solid var(--border); border-radius: 8px; padding: 12px; font-size: .92rem;
|
| 46 |
+
font-family: ui-monospace, "Cascadia Code", Consolas, monospace; line-height: 1.55; outline: none;
|
| 47 |
+
}
|
| 48 |
+
textarea#sql:focus { border-color: var(--accent); }
|
| 49 |
+
.bar { display: flex; gap: 10px; align-items: center; margin: 10px 0 6px; flex-wrap: wrap; }
|
| 50 |
+
button#run { background: var(--accent); color: #04140a; font-weight: 700; border: none; border-radius: 8px;
|
| 51 |
+
padding: 9px 22px; font-size: .95rem; cursor: pointer; font-family: inherit; letter-spacing: -0.3px; }
|
| 52 |
+
button#run:hover { filter: brightness(1.1); }
|
| 53 |
+
button#run:disabled { opacity: .45; cursor: wait; }
|
| 54 |
+
#status { font-size: .82rem; color: var(--muted); }
|
| 55 |
+
#status.ok { color: var(--accent); }
|
| 56 |
+
#status.err { color: var(--err); }
|
| 57 |
+
#errbox { display: none; white-space: pre-wrap; background: rgba(255,123,114,.08); border: 1px solid rgba(255,123,114,.4);
|
| 58 |
+
border-radius: 8px; color: var(--err); padding: 10px 12px; font-size: .82rem; font-family: ui-monospace, Consolas, monospace; margin-top: 8px; }
|
| 59 |
+
.tbl-scroll { max-height: 48vh; overflow: auto; border: 1px solid var(--border); border-radius: 8px; margin-top: 10px; }
|
| 60 |
+
table { border-collapse: collapse; width: 100%; font-size: .8rem; font-family: ui-monospace, Consolas, monospace; }
|
| 61 |
+
th { position: sticky; top: 0; background: #1c2330; color: var(--accent2); text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--border); }
|
| 62 |
+
td { padding: 5px 10px; border-bottom: 1px solid #212938; color: var(--text); white-space: nowrap; }
|
| 63 |
+
td.null { color: #55627a; font-style: italic; }
|
| 64 |
+
tr:hover td { background: #1a2130; }
|
| 65 |
+
.rownote { font-size: .75rem; color: var(--muted); margin-top: 6px; }
|
| 66 |
+
footer { padding: 6px 22px 26px; color: var(--muted); font-size: .8rem; }
|
| 67 |
+
footer a { color: var(--accent2); text-decoration: none; }
|
| 68 |
+
footer a:hover { text-decoration: underline; }
|
| 69 |
+
#boot { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center;
|
| 70 |
+
background: var(--bg); color: var(--muted); font-size: .95rem; z-index: 50; flex-direction: column; gap: 12px; }
|
| 71 |
+
#boot .spinner { width: 28px; height: 28px; border: 3px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.8s linear infinite; }
|
| 72 |
+
@keyframes spin { to { transform: rotate(360deg); } }
|
| 73 |
+
@media (max-width: 900px) { main { grid-template-columns: 1fr; } aside { max-height: none; } }
|
| 74 |
+
</style>
|
| 75 |
+
</head>
|
| 76 |
+
<body>
|
| 77 |
+
<div id="boot"><div class="spinner"></div><div>Loading DuckDB into WebAssembly… (~2.5 MB, then cached)</div></div>
|
| 78 |
+
<header>
|
| 79 |
+
<h1>🦆 SQL Query Playground</h1>
|
| 80 |
+
<span class="tag">55 tested templates · sequential warehouse runs in <i>your</i> browser — nothing is uploaded</span>
|
| 81 |
+
</header>
|
| 82 |
+
<main>
|
| 83 |
+
<aside>
|
| 84 |
+
<div id="schema"><h2>Schema</h2></div>
|
| 85 |
+
<div id="templates"><h2>Template library</h2></div>
|
| 86 |
+
</aside>
|
| 87 |
+
<section class="panel">
|
| 88 |
+
<div class="editorwrap">
|
| 89 |
+
<textarea id="sql" spellcheck="false"></textarea>
|
| 90 |
+
<div class="bar">
|
| 91 |
+
<button id="run" disabled>Run (Ctrl+Enter)</button>
|
| 92 |
+
<span id="status">Booting DuckDB…</span>
|
| 93 |
+
</div>
|
| 94 |
+
<div id="errbox"></div>
|
| 95 |
+
<div class="tbl-scroll" id="resultswrap" hidden><table id="results"></table></div>
|
| 96 |
+
<div class="rownote" id="rownote"></div>
|
| 97 |
+
</div>
|
| 98 |
+
</section>
|
| 99 |
+
</main>
|
| 100 |
+
<footer>
|
| 101 |
+
Data: seeded e-commerce warehouse (1,000 customers · 5,000 orders · 12,663 items) ·
|
| 102 |
+
Templates + code: <a href="https://github.com/Reaver1000/sql-query-builder">github.com/Reaver1000/sql-query-builder</a> ·
|
| 103 |
+
Portfolio: <a href="https://reaver1000.github.io">davidbuchan.dev</a> ·
|
| 104 |
+
Built by <a href="https://www.linkedin.com/in/david-a-buchan/">David Buchan</a>
|
| 105 |
+
</footer>
|
| 106 |
+
<script type="module">
|
| 107 |
+
const $ = (id) => document.getElementById(id);
|
| 108 |
+
const CSV_STATS = { customers: 1000, products: 100, orders: 5000, order_items: 12663 };
|
| 109 |
+
|
| 110 |
+
const STARTER = `-- Top customers by lifetime spend
|
| 111 |
+
SELECT c.name, c.country,
|
| 112 |
+
COUNT(o.order_id) AS orders,
|
| 113 |
+
ROUND(SUM(o.total_amount), 2) AS lifetime_spend
|
| 114 |
+
FROM orders o
|
| 115 |
+
JOIN customers c ON c.customer_id = o.customer_id
|
| 116 |
+
WHERE o.status = 'completed'
|
| 117 |
+
GROUP BY c.name, c.country
|
| 118 |
+
ORDER BY lifetime_spend DESC
|
| 119 |
+
LIMIT 10`;
|
| 120 |
+
|
| 121 |
+
function display(v, tstr) {
|
| 122 |
+
if (v === null || v === undefined) return { s: "NULL", cls: "null" };
|
| 123 |
+
const t = tstr || "";
|
| 124 |
+
if (typeof v === "bigint" && t.startsWith("Timestamp")) {
|
| 125 |
+
let ms = Number(v);
|
| 126 |
+
if (t.includes("Nanosecond")) ms /= 1e6;
|
| 127 |
+
else if (t.includes("Microsecond")) ms /= 1e3;
|
| 128 |
+
else if (t.includes("Second")) ms *= 1000;
|
| 129 |
+
return { s: new Date(ms).toISOString().slice(0, 10), cls: "" };
|
| 130 |
+
}
|
| 131 |
+
if (t.startsWith("Date<")) {
|
| 132 |
+
const ms = t.startsWith("Date<Millisecond") ? Number(v) : Number(v) * 86400000;
|
| 133 |
+
return { s: new Date(ms).toISOString().slice(0, 10), cls: "" };
|
| 134 |
+
}
|
| 135 |
+
if (v instanceof Date) { return { s: v.toISOString().slice(0, 10), cls: "" }; }
|
| 136 |
+
if (typeof v === "bigint") { return { s: v.toLocaleString("en-US"), cls: "" }; }
|
| 137 |
+
if (typeof v === "number") { return { s: Number.isInteger(v) ? v.toLocaleString("en-US") : v.toFixed(2), cls: "" }; }
|
| 138 |
+
return { s: String(v), cls: "" };
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
async function boot() {
|
| 142 |
+
const duckdb = await import("https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@1.33.1-dev57.0/+esm");
|
| 143 |
+
const bundle = await duckdb.selectBundle(duckdb.getJsDelivrBundles());
|
| 144 |
+
const worker = await duckdb.createWorker(bundle.mainWorker);
|
| 145 |
+
const db = new duckdb.AsyncDuckDB(new duckdb.ConsoleLogger(), worker);
|
| 146 |
+
await db.instantiate(bundle.mainModule);
|
| 147 |
+
|
| 148 |
+
for (const name of Object.keys(CSV_STATS)) {
|
| 149 |
+
const resp = await fetch(`data/${name}.csv`);
|
| 150 |
+
if (!resp.ok) { throw new Error(`Missing data file: ${name}.csv (HTTP ${resp.status})`); }
|
| 151 |
+
const buf = new Uint8Array(await resp.arrayBuffer());
|
| 152 |
+
await db.registerFileBuffer(name, buf);
|
| 153 |
+
}
|
| 154 |
+
const conn = await db.connect();
|
| 155 |
+
for (const name of Object.keys(CSV_STATS)) {
|
| 156 |
+
await conn.query(`CREATE TABLE ${name} AS SELECT * FROM read_csv_auto('${name}', header=true)`);
|
| 157 |
+
}
|
| 158 |
+
return { duckdb, db, conn };
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
let conn = null;
|
| 162 |
+
|
| 163 |
+
function describe_table(name, rows) {
|
| 164 |
+
const div = document.createElement("details");
|
| 165 |
+
div.innerHTML = `<summary>${name}</summary>`;
|
| 166 |
+
const cols = document.createElement("div");
|
| 167 |
+
cols.className = "cols";
|
| 168 |
+
cols.innerHTML = rows.map(r => `<div><b>${r[0]}</b> <i>${r[1]}</i></div>`).join("");
|
| 169 |
+
div.appendChild(cols);
|
| 170 |
+
$("schema").appendChild(div);
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
async function buildSchema() {
|
| 174 |
+
for (const name of Object.keys(CSV_STATS)) {
|
| 175 |
+
const res = await conn.query(`DESCRIBE ${name}`);
|
| 176 |
+
const rows = res.toArray().map(o => [o.column_name ?? o["name"], o.column_type ?? o["type"]]);
|
| 177 |
+
describe_table(name, rows);
|
| 178 |
+
}
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
async function buildTemplates() {
|
| 182 |
+
const all = await (await fetch("templates.json")).json();
|
| 183 |
+
const cats = {};
|
| 184 |
+
all.forEach(t => { (cats[t.category] = cats[t.category] || []).push(t); });
|
| 185 |
+
for (const [cat, items] of Object.entries(cats)) {
|
| 186 |
+
const d = document.createElement("details");
|
| 187 |
+
d.open = cat === "Basics";
|
| 188 |
+
const s = document.createElement("summary");
|
| 189 |
+
s.textContent = `${cat} (${items.length})`;
|
| 190 |
+
d.appendChild(s);
|
| 191 |
+
items.forEach(t => {
|
| 192 |
+
const label = document.createElement("span");
|
| 193 |
+
label.className = "tpl-desc";
|
| 194 |
+
label.textContent = t.description || "";
|
| 195 |
+
const b = document.createElement("button");
|
| 196 |
+
b.className = "tpl-item";
|
| 197 |
+
b.textContent = t.name;
|
| 198 |
+
b.addEventListener("click", () => {
|
| 199 |
+
$("sql").value = `-- ${t.description || t.name}\n${t.query}`;
|
| 200 |
+
$("sql").focus();
|
| 201 |
+
run();
|
| 202 |
+
});
|
| 203 |
+
d.appendChild(b);
|
| 204 |
+
d.appendChild(label);
|
| 205 |
+
});
|
| 206 |
+
$("templates").appendChild(d);
|
| 207 |
+
}
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
async function run() {
|
| 211 |
+
const sql = $("sql").value.trim();
|
| 212 |
+
if (!sql || !conn) return;
|
| 213 |
+
const btn = $("run"), st = $("status"), eb = $("errbox");
|
| 214 |
+
btn.disabled = true;
|
| 215 |
+
eb.style.display = "none";
|
| 216 |
+
st.className = "";
|
| 217 |
+
st.textContent = "Executing…";
|
| 218 |
+
$("resultswrap").hidden = true;
|
| 219 |
+
$("rownote").textContent = "";
|
| 220 |
+
const t0 = performance.now();
|
| 221 |
+
try {
|
| 222 |
+
const hsv = sql.replace(/;\s*$/, "");
|
| 223 |
+
const desc = await conn.query(`DESCRIBE SELECT * FROM (${hsv})`);
|
| 224 |
+
const dateCols = desc.toArray()
|
| 225 |
+
.filter(r => r.column_type && /TIMESTAMP|DATE/i.test(r.column_type))
|
| 226 |
+
.map(r => r.column_name);
|
| 227 |
+
let execSql = hsv;
|
| 228 |
+
if (dateCols.length) {
|
| 229 |
+
const casts = dateCols.map(c => {
|
| 230 |
+
const q = `"${c.replace(/"/g, '""')}"`;
|
| 231 |
+
return `CAST(${q} AS VARCHAR) AS ${q}`;
|
| 232 |
+
}).join(", ");
|
| 233 |
+
execSql = `SELECT * REPLACE (${casts}) FROM (${hsv})`;
|
| 234 |
+
}
|
| 235 |
+
const result = await conn.query(execSql);
|
| 236 |
+
const ms = (performance.now() - t0).toFixed(0);
|
| 237 |
+
const rows = result.toArray();
|
| 238 |
+
const types = Object.fromEntries((result.schema.fields || []).map(f => [f.name, String(f.type)]));
|
| 239 |
+
const cols = rows.length ? Object.keys(rows[0]) : (result.schema.fields?.map(f => f.name) || []);
|
| 240 |
+
const head = document.createElement("thead");
|
| 241 |
+
head.innerHTML = "<tr>" + cols.map(c => `<th>${c}</th>`).join("") + "</tr>";
|
| 242 |
+
const body = document.createElement("tbody");
|
| 243 |
+
const CAP = 200;
|
| 244 |
+
rows.slice(0, CAP).forEach(r => {
|
| 245 |
+
const tr = document.createElement("tr");
|
| 246 |
+
tr.innerHTML = cols.map(c => {
|
| 247 |
+
const v = display(r[c], types[c]);
|
| 248 |
+
return `<td class="${v.cls}">${v.s}</td>`;
|
| 249 |
+
}).join("");
|
| 250 |
+
body.appendChild(tr);
|
| 251 |
+
});
|
| 252 |
+
$("results").innerHTML = "";
|
| 253 |
+
if (cols.length) $("results").appendChild(head);
|
| 254 |
+
$("results").appendChild(body);
|
| 255 |
+
$("resultswrap").hidden = false;
|
| 256 |
+
st.className = "ok";
|
| 257 |
+
st.textContent = `✓ ${result.numRows.toLocaleString("en-US")} rows · ${cols.length} cols · ${ms} ms`;
|
| 258 |
+
$("rownote").textContent = rows.length > CAP
|
| 259 |
+
? `Showing first ${CAP} of ${result.numRows.toLocaleString("en-US")} rows — add a LIMIT to inspect the full result set.`
|
| 260 |
+
: "";
|
| 261 |
+
} catch (e) {
|
| 262 |
+
st.className = "err";
|
| 263 |
+
st.textContent = "✗ Query error";
|
| 264 |
+
eb.style.display = "block";
|
| 265 |
+
eb.textContent = String(e?.message || e).slice(0, 800);
|
| 266 |
+
} finally {
|
| 267 |
+
btn.disabled = false;
|
| 268 |
+
}
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
$("run").addEventListener("click", run);
|
| 272 |
+
$("sql").addEventListener("keydown", (e) => {
|
| 273 |
+
if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) { e.preventDefault(); run(); }
|
| 274 |
+
});
|
| 275 |
+
|
| 276 |
+
$("sql").value = STARTER;
|
| 277 |
+
try {
|
| 278 |
+
const { conn: c } = await boot();
|
| 279 |
+
conn = c;
|
| 280 |
+
await buildSchema();
|
| 281 |
+
await buildTemplates();
|
| 282 |
+
$("boot").remove();
|
| 283 |
+
$("status").textContent = `${Object.values(CSV_STATS).reduce((a, b) => a + b, 0).toLocaleString("en-US")} rows loaded · zero backend`;
|
| 284 |
+
$("status").className = "ok";
|
| 285 |
+
$("run").disabled = false;
|
| 286 |
+
run();
|
| 287 |
+
} catch (e) {
|
| 288 |
+
$("boot").innerHTML = `<div>Failed to load DuckDB: ${String(e?.message || e).slice(0, 200)}</div>`;
|
| 289 |
+
}
|
| 290 |
+
</script>
|
| 291 |
+
</body>
|
| 292 |
</html>
|
templates.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
[{"category": "Basics", "name": "Peek at a table", "description": "SELECT with LIMIT — always bound your exploratory queries", "query": "SELECT * FROM orders LIMIT 10"}, {"category": "Basics", "name": "Sorting", "description": "Largest completed orders first", "query": "SELECT order_id, customer_id, total_amount, order_date\nFROM orders\nWHERE status = 'completed'\nORDER BY total_amount DESC\nLIMIT 15"}, {"category": "Basics", "name": "Distinct values", "description": "What statuses exist, and how many of each?", "query": "SELECT DISTINCT status FROM orders ORDER BY status"}, {"category": "Basics", "name": "Computed columns", "description": "Margin and margin % from price and cost", "query": "SELECT name, category, price, cost,\n ROUND(price - cost, 2) AS margin,\n ROUND(100.0 * (price - cost) / price, 1) AS margin_pct\nFROM products\nORDER BY margin_pct DESC\nLIMIT 15"}, {"category": "Basics", "name": "Row counts per table", "description": "UNION ALL to stack per-table counts", "query": "SELECT 'customers' AS table_name, COUNT(*) AS rows FROM customers\nUNION ALL SELECT 'products', COUNT(*) FROM products\nUNION ALL SELECT 'orders', COUNT(*) FROM orders\nUNION ALL SELECT 'order_items', COUNT(*) FROM order_items"}, {"category": "Basics", "name": "Random sample", "description": "DuckDB's USING SAMPLE for quick data inspection", "query": "SELECT * FROM customers USING SAMPLE 10 ROWS"}, {"category": "Filtering", "name": "Combining conditions", "description": "AND/OR with explicit parentheses", "query": "SELECT order_id, total_amount, payment_method\nFROM orders\nWHERE status = 'completed'\n AND (payment_method = 'credit_card' OR payment_method = 'paypal')\n AND total_amount > 400\nORDER BY total_amount DESC\nLIMIT 15"}, {"category": "Filtering", "name": "IN lists", "description": "Membership tests instead of chained ORs", "query": "SELECT country, COUNT(*) AS customers\nFROM customers\nWHERE country IN ('UK', 'Germany', 'France')\nGROUP BY country\nORDER BY customers DESC"}, {"category": "Filtering", "name": "Date ranges", "description": "BETWEEN on timestamps — Q1 2024 orders", "query": "SELECT COUNT(*) AS q1_orders, ROUND(SUM(total_amount), 2) AS q1_revenue\nFROM orders\nWHERE order_date BETWEEN '2024-01-01' AND '2024-03-31 23:59:59'\n AND status = 'completed'"}, {"category": "Filtering", "name": "Pattern matching", "description": "LIKE with wildcards", "query": "SELECT email, name\nFROM customers\nWHERE email LIKE 'customer1__@%'\nORDER BY email\nLIMIT 15"}, {"category": "Filtering", "name": "Anti-join: customers with no orders", "description": "NOT EXISTS — the reliable way to find missing relationships", "query": "SELECT c.customer_id, c.name, c.country\nFROM customers c\nWHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id)\nORDER BY c.customer_id\nLIMIT 20"}, {"category": "Filtering", "name": "CASE bucketing", "description": "Label rows into bands, then count the bands", "query": "SELECT CASE\n WHEN total_amount < 100 THEN 'small'\n WHEN total_amount < 300 THEN 'medium'\n ELSE 'large'\n END AS order_size,\n COUNT(*) AS orders,\n ROUND(AVG(total_amount), 2) AS avg_amount\nFROM orders\nGROUP BY 1\nORDER BY avg_amount"}, {"category": "Joins", "name": "Inner join", "description": "Order lines with product names and categories", "query": "SELECT oi.order_id, p.name, p.category, oi.quantity, oi.unit_price\nFROM order_items oi\nJOIN products p ON p.product_id = oi.product_id\nORDER BY oi.order_id\nLIMIT 15"}, {"category": "Joins", "name": "Left join with zero-fill", "description": "Every customer, including the ones who never ordered", "query": "SELECT c.customer_id, c.name,\n COUNT(o.order_id) AS orders,\n COALESCE(ROUND(SUM(o.total_amount), 2), 0) AS total_spend\nFROM customers c\nLEFT JOIN orders o ON o.customer_id = c.customer_id AND o.status = 'completed'\nGROUP BY 1, 2\nORDER BY total_spend ASC\nLIMIT 15"}, {"category": "Joins", "name": "Four-table join", "description": "Country × category revenue through the full schema", "query": "SELECT c.country, p.category,\n ROUND(SUM(oi.quantity * oi.unit_price), 2) AS revenue\nFROM customers c\nJOIN orders o ON o.customer_id = c.customer_id\nJOIN order_items oi ON oi.order_id = o.order_id\nJOIN products p ON p.product_id = oi.product_id\nWHERE o.status = 'completed'\nGROUP BY 1, 2\nORDER BY revenue DESC\nLIMIT 20"}, {"category": "Joins", "name": "Self join", "description": "Similar-priced products within the same category", "query": "SELECT a.category, a.name AS product_a, b.name AS product_b,\n a.price AS price_a, b.price AS price_b\nFROM products a\nJOIN products b ON a.category = b.category\n AND a.product_id < b.product_id\n AND ABS(a.price - b.price) < 5\nORDER BY a.category, a.price\nLIMIT 15"}, {"category": "Joins", "name": "Semi join (EXISTS)", "description": "Customers who have at least one refunded order", "query": "SELECT c.customer_id, c.name, c.segment\nFROM customers c\nWHERE EXISTS (\n SELECT 1 FROM orders o\n WHERE o.customer_id = c.customer_id AND o.status = 'refunded'\n)\nORDER BY c.customer_id\nLIMIT 20"}, {"category": "Joins", "name": "Date spine", "description": "generate_series + LEFT JOIN so days without orders still appear", "query": "SELECT spine.day, COALESCE(ROUND(SUM(o.total_amount), 2), 0) AS revenue\nFROM generate_series(DATE '2024-01-01', DATE '2024-01-14', INTERVAL 1 DAY) AS spine(day)\nLEFT JOIN orders o\n ON CAST(o.order_date AS DATE) = spine.day AND o.status = 'completed'\nGROUP BY spine.day\nORDER BY spine.day"}, {"category": "Joins", "name": "Join vs join-with-filter", "description": "Filter inside the ON clause keeps unmatched rows", "query": "SELECT c.segment,\n COUNT(DISTINCT c.customer_id) AS all_customers,\n COUNT(DISTINCT o.customer_id) AS crypto_payers\nFROM customers c\nLEFT JOIN orders o ON o.customer_id = c.customer_id AND o.payment_method = 'crypto'\nGROUP BY 1\nORDER BY all_customers DESC"}, {"category": "Aggregation", "name": "GROUP BY + HAVING", "description": "HAVING filters groups after aggregation", "query": "SELECT country, COUNT(*) AS customers\nFROM customers\nGROUP BY country\nHAVING COUNT(*) > 100\nORDER BY customers DESC"}, {"category": "Aggregation", "name": "The full aggregate set", "description": "COUNT/SUM/AVG/MIN/MAX in one pass", "query": "SELECT status,\n COUNT(*) AS orders,\n ROUND(SUM(total_amount), 2) AS revenue,\n ROUND(AVG(total_amount), 2) AS avg_value,\n MIN(total_amount) AS smallest,\n MAX(total_amount) AS largest\nFROM orders\nGROUP BY status\nORDER BY revenue DESC"}, {"category": "Aggregation", "name": "Conditional aggregation (FILTER)", "description": "Pivot statuses into columns without a PIVOT clause", "query": "SELECT payment_method,\n COUNT(*) FILTER (WHERE status = 'completed') AS completed,\n COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled,\n COUNT(*) FILTER (WHERE status = 'refunded') AS refunded\nFROM orders\nGROUP BY 1\nORDER BY completed DESC"}, {"category": "Aggregation", "name": "ROLLUP subtotals", "description": "Per-group rows plus subtotal and grand-total rows", "query": "SELECT c.country, c.segment, ROUND(SUM(o.total_amount), 2) AS revenue\nFROM customers c\nJOIN orders o ON o.customer_id = c.customer_id\nWHERE o.status = 'completed'\nGROUP BY ROLLUP (c.country, c.segment)\nORDER BY c.country NULLS LAST, c.segment NULLS LAST"}, {"category": "Aggregation", "name": "Median and percentiles", "description": "PERCENTILE_CONT for distribution shape, not just averages", "query": "SELECT status,\n ROUND(AVG(total_amount), 2) AS mean,\n PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_amount) AS median,\n PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY total_amount) AS p90\nFROM orders\nGROUP BY status"}, {"category": "Aggregation", "name": "String aggregation", "description": "STRING_AGG collapses a group into one readable cell", "query": "SELECT oi.order_id,\n STRING_AGG(DISTINCT p.category, ', ' ORDER BY p.category) AS categories_in_order\nFROM order_items oi\nJOIN products p ON p.product_id = oi.product_id\nGROUP BY oi.order_id\nORDER BY oi.order_id\nLIMIT 12"}, {"category": "Aggregation", "name": "Distinct counts", "description": "COUNT(DISTINCT ...) — unique buyers per payment method", "query": "SELECT payment_method,\n COUNT(*) AS orders,\n COUNT(DISTINCT customer_id) AS unique_buyers\nFROM orders\nGROUP BY 1\nORDER BY orders DESC"}, {"category": "Date & Time", "name": "Monthly revenue", "description": "DATE_TRUNC is the workhorse of time-series SQL", "query": "SELECT DATE_TRUNC('month', order_date) AS month,\n COUNT(*) AS orders,\n ROUND(SUM(total_amount), 2) AS revenue\nFROM orders\nWHERE status = 'completed'\nGROUP BY 1\nORDER BY 1"}, {"category": "Date & Time", "name": "Day-of-week pattern", "description": "Which weekdays sell the most?", "query": "SELECT DAYNAME(order_date) AS weekday,\n COUNT(*) AS orders,\n ROUND(AVG(total_amount), 2) AS avg_value\nFROM orders\nGROUP BY weekday, DAYOFWEEK(order_date)\nORDER BY DAYOFWEEK(order_date)"}, {"category": "Date & Time", "name": "Hour-of-day distribution", "description": "EXTRACT pulls any date part", "query": "SELECT EXTRACT(hour FROM order_date) AS hour, COUNT(*) AS orders\nFROM orders\nGROUP BY 1\nORDER BY 1"}, {"category": "Date & Time", "name": "Signup-to-first-order gap", "description": "DATE_DIFF between two event dates per customer", "query": "SELECT c.customer_id, c.created_at,\n MIN(o.order_date) AS first_order,\n DATE_DIFF('day', c.created_at, MIN(o.order_date)) AS days_to_first_order\nFROM customers c\nJOIN orders o ON o.customer_id = c.customer_id\nGROUP BY 1, 2\nHAVING DATE_DIFF('day', c.created_at, MIN(o.order_date)) >= 0\nORDER BY days_to_first_order\nLIMIT 15"}, {"category": "Date & Time", "name": "Quarterly summary", "description": "QUARTER() for coarse-grained reporting", "query": "SELECT QUARTER(order_date) AS quarter,\n COUNT(*) AS orders,\n ROUND(SUM(total_amount), 2) AS revenue\nFROM orders\nWHERE status = 'completed'\nGROUP BY 1\nORDER BY 1"}, {"category": "Date & Time", "name": "Signup cohort sizes", "description": "Customers grouped by signup month", "query": "SELECT DATE_TRUNC('month', created_at) AS signup_month,\n COUNT(*) AS new_customers,\n SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) AS running_total\nFROM customers\nGROUP BY 1\nORDER BY 1"}, {"category": "Window Functions", "name": "Latest order per customer", "description": "ROW_NUMBER + QUALIFY to keep one row per group", "query": "SELECT customer_id, order_id, order_date, total_amount\nFROM orders\nQUALIFY ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) = 1\nORDER BY customer_id\nLIMIT 20"}, {"category": "Window Functions", "name": "Product rank within category", "description": "RANK and DENSE_RANK compared side by side", "query": "SELECT p.category, p.name,\n SUM(oi.quantity * oi.unit_price) AS revenue,\n RANK() OVER (PARTITION BY p.category ORDER BY SUM(oi.quantity * oi.unit_price) DESC) AS rnk,\n DENSE_RANK() OVER (PARTITION BY p.category ORDER BY SUM(oi.quantity * oi.unit_price) DESC) AS dense_rnk\nFROM products p\nJOIN order_items oi ON oi.product_id = p.product_id\nGROUP BY p.category, p.name\nQUALIFY rnk <= 3\nORDER BY p.category, rnk"}, {"category": "Window Functions", "name": "Running revenue total", "description": "Cumulative sum over ordered daily revenue", "query": "WITH daily AS (\n SELECT CAST(order_date AS DATE) AS day, SUM(total_amount) AS revenue\n FROM orders WHERE status = 'completed' GROUP BY 1\n)\nSELECT day, revenue,\n SUM(revenue) OVER (ORDER BY day) AS cumulative_revenue\nFROM daily\nORDER BY day\nLIMIT 31"}, {"category": "Window Functions", "name": "7-day moving average", "description": "Window frame: ROWS BETWEEN 6 PRECEDING AND CURRENT ROW", "query": "WITH daily AS (\n SELECT CAST(order_date AS DATE) AS day, SUM(total_amount) AS revenue\n FROM orders WHERE status = 'completed' GROUP BY 1\n)\nSELECT day, revenue,\n ROUND(AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW), 2) AS ma_7d\nFROM daily\nORDER BY day\nLIMIT 31"}, {"category": "Window Functions", "name": "Month-over-month growth", "description": "LAG to compare each month with the previous one", "query": "WITH monthly AS (\n SELECT DATE_TRUNC('month', order_date) AS month, SUM(total_amount) AS revenue\n FROM orders WHERE status = 'completed' GROUP BY 1\n)\nSELECT month, revenue,\n LAG(revenue) OVER (ORDER BY month) AS prev_month,\n ROUND(100.0 * (revenue - LAG(revenue) OVER (ORDER BY month))\n / NULLIF(LAG(revenue) OVER (ORDER BY month), 0), 1) AS growth_pct\nFROM monthly\nORDER BY month"}, {"category": "Window Functions", "name": "Customer spend quartiles", "description": "NTILE(4) buckets customers by total spend", "query": "WITH spend AS (\n SELECT customer_id, SUM(total_amount) AS total_spend\n FROM orders WHERE status = 'completed' GROUP BY 1\n), tiled AS (\n SELECT customer_id, total_spend,\n NTILE(4) OVER (ORDER BY total_spend) AS quartile\n FROM spend\n)\nSELECT quartile,\n COUNT(*) AS customers,\n ROUND(MIN(total_spend), 2) AS min_spend,\n ROUND(AVG(total_spend), 2) AS avg_spend,\n ROUND(MAX(total_spend), 2) AS max_spend\nFROM tiled\nGROUP BY quartile\nORDER BY quartile"}, {"category": "Window Functions", "name": "Share of total revenue", "description": "SUM() OVER () with no partition = grand total", "query": "SELECT p.category,\n SUM(oi.quantity * oi.unit_price) AS revenue,\n ROUND(100.0 * SUM(oi.quantity * oi.unit_price) / SUM(SUM(oi.quantity * oi.unit_price)) OVER (), 1) AS pct_of_total\nFROM products p\nJOIN order_items oi ON oi.product_id = p.product_id\nGROUP BY p.category\nORDER BY revenue DESC"}, {"category": "Window Functions", "name": "First and latest order per customer", "description": "MIN/MAX as window functions preserve detail rows", "query": "SELECT DISTINCT customer_id,\n MIN(order_date) OVER (PARTITION BY customer_id) AS first_order,\n MAX(order_date) OVER (PARTITION BY customer_id) AS latest_order\nFROM orders\nORDER BY customer_id\nLIMIT 20"}, {"category": "CTEs & Subqueries", "name": "CTE: high-value customers", "description": "Name an intermediate result, then join against it", "query": "WITH big_spenders AS (\n SELECT customer_id, SUM(total_amount) AS spend\n FROM orders WHERE status = 'completed'\n GROUP BY 1\n HAVING SUM(total_amount) > 1500\n)\nSELECT c.name, c.country, c.segment, b.spend\nFROM big_spenders b\nJOIN customers c ON c.customer_id = b.customer_id\nORDER BY b.spend DESC\nLIMIT 20"}, {"category": "CTEs & Subqueries", "name": "Multi-CTE funnel", "description": "Chained CTEs: base revenue → country totals → top 3", "query": "WITH completed AS (\n SELECT * FROM orders WHERE status = 'completed'\n), by_country AS (\n SELECT c.country, SUM(o.total_amount) AS revenue\n FROM completed o JOIN customers c ON c.customer_id = o.customer_id\n GROUP BY 1\n)\nSELECT * FROM by_country ORDER BY revenue DESC LIMIT 3"}, {"category": "CTEs & Subqueries", "name": "Orders above the customer's own average", "description": "Correlated subquery — re-evaluated per outer row", "query": "SELECT o.customer_id, o.order_id, o.total_amount\nFROM orders o\nWHERE o.status = 'completed'\n AND o.total_amount > 1.8 * (\n SELECT AVG(o2.total_amount) FROM orders o2\n WHERE o2.customer_id = o.customer_id AND o2.status = 'completed'\n )\nORDER BY o.total_amount DESC\nLIMIT 20"}, {"category": "CTEs & Subqueries", "name": "Orders vs global average", "description": "Scalar subquery used inline in an expression", "query": "SELECT order_id, total_amount,\n ROUND(total_amount - (SELECT AVG(total_amount) FROM orders WHERE status = 'completed'), 2) AS vs_avg\nFROM orders\nWHERE status = 'completed'\nORDER BY vs_avg DESC\nLIMIT 15"}, {"category": "CTEs & Subqueries", "name": "Recursive CTE: month spine", "description": "WITH RECURSIVE generating the 12 months of 2024", "query": "WITH RECURSIVE months(month_start) AS (\n SELECT DATE '2024-01-01'\n UNION ALL\n SELECT month_start + INTERVAL 1 MONTH FROM months\n WHERE month_start < DATE '2024-12-01'\n)\nSELECT m.month_start,\n COALESCE(SUM(o.total_amount), 0) AS revenue\nFROM months m\nLEFT JOIN orders o\n ON DATE_TRUNC('month', o.order_date) = m.month_start AND o.status = 'completed'\nGROUP BY 1\nORDER BY 1"}, {"category": "CTEs & Subqueries", "name": "IN with a subquery", "description": "Customers from the single top revenue country", "query": "SELECT name, email, segment\nFROM customers\nWHERE country IN (\n SELECT c.country\n FROM customers c JOIN orders o ON o.customer_id = c.customer_id\n WHERE o.status = 'completed'\n GROUP BY c.country\n ORDER BY SUM(o.total_amount) DESC\n LIMIT 1\n)\nLIMIT 20"}, {"category": "Business Analytics", "name": "Pareto (80/20) analysis", "description": "Cumulative revenue share — how few products drive most revenue", "query": "WITH product_revenue AS (\n SELECT p.name, SUM(oi.quantity * oi.unit_price) AS revenue\n FROM products p JOIN order_items oi ON oi.product_id = p.product_id\n GROUP BY 1\n)\nSELECT name, revenue,\n ROUND(100.0 * SUM(revenue) OVER (ORDER BY revenue DESC) / SUM(revenue) OVER (), 1) AS cumulative_pct\nFROM product_revenue\nORDER BY revenue DESC\nLIMIT 25"}, {"category": "Business Analytics", "name": "RFM scores", "description": "Recency / Frequency / Monetary quintiles per customer", "query": "WITH per_customer AS (\n SELECT customer_id,\n MAX(order_date) AS last_order,\n COUNT(*) AS frequency,\n SUM(total_amount) AS monetary\n FROM orders WHERE status = 'completed'\n GROUP BY 1\n)\nSELECT customer_id,\n NTILE(5) OVER (ORDER BY last_order) AS r_score,\n NTILE(5) OVER (ORDER BY frequency) AS f_score,\n NTILE(5) OVER (ORDER BY monetary) AS m_score,\n frequency, ROUND(monetary, 2) AS monetary\nFROM per_customer\nORDER BY monetary DESC\nLIMIT 20"}, {"category": "Business Analytics", "name": "Cohort retention", "description": "Signup cohort vs months-to-order matrix (FILTER pivots)", "query": "WITH cohorts AS (\n SELECT c.customer_id, DATE_TRUNC('month', c.created_at) AS cohort_month\n FROM customers c\n), activity AS (\n SELECT ch.cohort_month,\n DATE_DIFF('month', ch.cohort_month, DATE_TRUNC('month', o.order_date)) AS month_offset,\n o.customer_id\n FROM cohorts ch JOIN orders o ON o.customer_id = ch.customer_id\n WHERE o.status = 'completed'\n)\nSELECT cohort_month,\n COUNT(DISTINCT customer_id) FILTER (WHERE month_offset = 0) AS m0,\n COUNT(DISTINCT customer_id) FILTER (WHERE month_offset = 1) AS m1,\n COUNT(DISTINCT customer_id) FILTER (WHERE month_offset = 2) AS m2,\n COUNT(DISTINCT customer_id) FILTER (WHERE month_offset = 3) AS m3\nFROM activity\nGROUP BY 1\nORDER BY 1"}, {"category": "Business Analytics", "name": "Repeat purchase rate", "description": "Share of customers with two or more completed orders", "query": "WITH order_counts AS (\n SELECT customer_id, COUNT(*) AS n\n FROM orders WHERE status = 'completed'\n GROUP BY 1\n)\nSELECT COUNT(*) AS buyers,\n COUNT(*) FILTER (WHERE n >= 2) AS repeat_buyers,\n ROUND(100.0 * COUNT(*) FILTER (WHERE n >= 2) / COUNT(*), 1) AS repeat_rate_pct\nFROM order_counts"}, {"category": "Business Analytics", "name": "Average order value trend", "description": "Monthly AOV with order counts for context", "query": "SELECT DATE_TRUNC('month', order_date) AS month,\n COUNT(*) AS orders,\n ROUND(AVG(total_amount), 2) AS avg_order_value\nFROM orders\nWHERE status = 'completed'\nGROUP BY 1\nORDER BY 1"}, {"category": "Business Analytics", "name": "Revenue per customer by segment", "description": "A simple lifetime-value proxy per segment", "query": "SELECT c.segment,\n COUNT(DISTINCT c.customer_id) AS customers,\n ROUND(SUM(o.total_amount), 2) AS revenue,\n ROUND(SUM(o.total_amount) / COUNT(DISTINCT c.customer_id), 2) AS revenue_per_customer\nFROM customers c\nJOIN orders o ON o.customer_id = c.customer_id AND o.status = 'completed'\nGROUP BY 1\nORDER BY revenue_per_customer DESC"}, {"category": "Business Analytics", "name": "Products bought together", "description": "Market-basket pairs via a self join on order_id", "query": "SELECT p1.name AS product_a, p2.name AS product_b, COUNT(*) AS times_together\nFROM order_items a\nJOIN order_items b ON a.order_id = b.order_id AND a.product_id < b.product_id\nJOIN products p1 ON p1.product_id = a.product_id\nJOIN products p2 ON p2.product_id = b.product_id\nGROUP BY 1, 2\nORDER BY times_together DESC\nLIMIT 10"}, {"category": "Business Analytics", "name": "Refund rate by category", "description": "Conditional aggregation across joined tables", "query": "SELECT p.category,\n COUNT(DISTINCT o.order_id) AS orders,\n COUNT(DISTINCT o.order_id) FILTER (WHERE o.status = 'refunded') AS refunded,\n ROUND(100.0 * COUNT(DISTINCT o.order_id) FILTER (WHERE o.status = 'refunded')\n / COUNT(DISTINCT o.order_id), 2) AS refund_rate_pct\nFROM orders o\nJOIN order_items oi ON oi.order_id = o.order_id\nJOIN products p ON p.product_id = oi.product_id\nGROUP BY 1\nORDER BY refund_rate_pct DESC"}, {"category": "Business Analytics", "name": "New vs returning revenue", "description": "Classify each order against the customer's first order month", "query": "WITH firsts AS (\n SELECT customer_id, MIN(DATE_TRUNC('month', order_date)) AS first_month\n FROM orders WHERE status = 'completed' GROUP BY 1\n)\nSELECT DATE_TRUNC('month', o.order_date) AS month,\n ROUND(SUM(o.total_amount) FILTER (WHERE DATE_TRUNC('month', o.order_date) = f.first_month), 2) AS new_customer_revenue,\n ROUND(SUM(o.total_amount) FILTER (WHERE DATE_TRUNC('month', o.order_date) > f.first_month), 2) AS returning_revenue\nFROM orders o\nJOIN firsts f ON f.customer_id = o.customer_id\nWHERE o.status = 'completed'\nGROUP BY 1\nORDER BY 1"}]
|