Um die Effektivität des Gebens eines kostenlosen Produkts bei der Erlangung neuer Kunden zu messen, möchte ich die Anzahl der Kunden finden, die für eine Bestellung bezahlt haben, nachdem sie nur eine kostenlose Bestellung erhalten haben. Meine Tabelle wie folgt aussieht:Suchen von Zeilen mit bestimmten Bedingungen nach Reihen anderer Bedingungen
id | user | total
-----------------
1 1 0.00
2 1 57.33
3 2 58.21
4 2 0.00
5 3 26.10
6 3 0.00
7 3 64.94
8 4 0.00
9 5 34.54
In dieser Tabelle gibt es fünf Kunden: 1
, 2
, 3
, 4
und 5
. Dies gilt für alle denkbaren Bedingungen.
- Benutzer 1 eine kostenlose Bestellung erhalten und dann einen bezahlten Auftrag, zählt diese
- Benutzer 2 einen bezahlten Auftrag platziert und erhielten dann eine freie Ordnung, das ist nicht
- User 3 zählt eine bezahlte Bestellung , dann einen freien Auftrag erhielt, legte dann einen bezahlten Auftrag, dies nicht
- Benutzer 4 erhielt eine kostenlose Bestellung zählt, ist dies nicht
- Benutzer 5 einen bezahlten Auftrag zählt platziert, dies nicht
Sie können sehen, dass ich mich nur um Benutzer kümmere, die keine bezahlte Bestellung aufgegeben haben, bevor sie eine kostenlose Bestellung erhalten haben, und dann eine bezahlte Bestellung aufgegeben haben. Eine deklarative Definition des Grafen ich suche ist:
- Benutzer einen Auftrag vergaben
n
won->total > 0
nach Auftrag empfangenm
, wom->total == 0
undm->id < n->id
. Es gibt keine Bestellungw
wow->total > 0
undw->id < m->id
.
Einige create table
Code:
create table orders (
id int NOT NULL AUTO_INCREMENT,
user int,
total decimal(6,2),
PRIMARY KEY(id)
);
insert into orders (user, total) values
(1, 0.00),
(1, 57.33),
(2, 58.21),
(2, 0.00),
(3, 26.10),
(3, 0.00),
(3, 64.94),
(4, 0.00),
(5, 34.54);
Die erwartete Ausgabe in diesem Fall würde 1
sein.
ist diese Zeile korrekt? ** Sie können sehen, dass ich mich nur um Benutzer kümmere, die keine bezahlte Bestellung aufgegeben haben, bevor Sie eine bezahlte Bestellung erhalten haben. ** – 1000111
Um Ihrer Logik zu entsprechen, müssen wir uns die drei neuesten ID - Werte für jeden Benutzer und die entsprechende Zeitstempel. Dies ist in MySQL ein wenig schwierig, und ich denke, die Antwort könnte dynamisches SQL erfordern. –
@ 1000111 Entschuldigung, habe einen Tippfehler gemacht. Ich habe es behoben, es hätte sein sollen "wer hat keine bezahlte Bestellung aufgegeben, bevor er eine kostenlose Bestellung erhalten hat". – gator