Hallo erstmal.
Ich suche nach dem letzten Status 0 Wert einer UID und
dem dazugehörigen (selbe UID) Status 1 Wert vor dem letzten Status 0 Wert.
Das ist meine Tabelle:
mysql> select * from dznw;
+----+------+-----------------------+--------+
| id | uid | datum | status |
+----+------+-----------------------+--------+
| 1 | 1000 | 2009-01-24 08:01:01 | 1 | (1..... arbeitsbeginn)
| 2 | 1000 | 2009-01-24 10:12:15 | 0 | (0..... arbeitsende)
| 3 | 1000 | 2009-01-24 10:17:23 | 1 |
| 4 | 1000 | 2009-01-24 12:06:46 | 0 |
| 5 | 2222 | 2009-01-24 12:30:14 | 1 |
| 6 | 2222 | 2009-01-24 14:03:06 | 0 |
| 7 | 2222 | 2009-01-24 14:27:27 | 1 |
| 8 | 1000 | 2009-01-24 15:04:23 | 1 |
| 9 | 2222 | 2009-01-25 08:46:18 | 0 |
| 10 | 1000 | 2009-01-25 08:47:39 | 0 |
| 11 | 1000 | 2009-01-25 12:00:00 | 1 |
+----+------+---------------------+--------+
11 rows in set (0.00 sec)
Jetzt benutze ich folgende Abfrage:
mysql> SELECT `id`, UNIX_TIMESTAMP(`datum`) AS `timestamp` FROM `dznw` WHERE `status` = '0' ORDER BY `id` DESC LIMIT 1;
+----+------------+
| id | timestamp |
+----+------------+
| 10 | 1232869659 |
+----+------------+
1 row in set (0.01 sec)
Somit bekomme ich genau den Wert den ich suche.
Jetzt zu meinem PROBLEM:
Aber wenn ich jetzt nach dem letzten Status 1 Wert „vor“ dem letzten Status 0 Wert suche weiß ich nicht wie das funktionieren soll.
Diese Abfrage funktioniert nur wenn der letzte Status Wert eine 0 enthält,
mysql> SELECT `id`, UNIX_TIMESTAMP(`datum`) AS `timestamp` FROM `dznw` WHERE `status` = '1' AND `id` < 35 ORDER BY `id` DESC LIMIT 1;
+----+------------+
| id | timestamp |
+----+------------+
| 11 | 1232881200 |
+----+------------+
1 row in set (0.00 sec)
Was mach ich falsch
Ich suche nach dem letzten Status 0 Wert einer UID und
dem dazugehörigen (selbe UID) Status 1 Wert vor dem letzten Status 0 Wert.
Das ist meine Tabelle:
mysql> select * from dznw;
+----+------+-----------------------+--------+
| id | uid | datum | status |
+----+------+-----------------------+--------+
| 1 | 1000 | 2009-01-24 08:01:01 | 1 | (1..... arbeitsbeginn)
| 2 | 1000 | 2009-01-24 10:12:15 | 0 | (0..... arbeitsende)
| 3 | 1000 | 2009-01-24 10:17:23 | 1 |
| 4 | 1000 | 2009-01-24 12:06:46 | 0 |
| 5 | 2222 | 2009-01-24 12:30:14 | 1 |
| 6 | 2222 | 2009-01-24 14:03:06 | 0 |
| 7 | 2222 | 2009-01-24 14:27:27 | 1 |
| 8 | 1000 | 2009-01-24 15:04:23 | 1 |
| 9 | 2222 | 2009-01-25 08:46:18 | 0 |
| 10 | 1000 | 2009-01-25 08:47:39 | 0 |
| 11 | 1000 | 2009-01-25 12:00:00 | 1 |
+----+------+---------------------+--------+
11 rows in set (0.00 sec)
Jetzt benutze ich folgende Abfrage:
mysql> SELECT `id`, UNIX_TIMESTAMP(`datum`) AS `timestamp` FROM `dznw` WHERE `status` = '0' ORDER BY `id` DESC LIMIT 1;
+----+------------+
| id | timestamp |
+----+------------+
| 10 | 1232869659 |
+----+------------+
1 row in set (0.01 sec)
Somit bekomme ich genau den Wert den ich suche.
Jetzt zu meinem PROBLEM:
Aber wenn ich jetzt nach dem letzten Status 1 Wert „vor“ dem letzten Status 0 Wert suche weiß ich nicht wie das funktionieren soll.
Diese Abfrage funktioniert nur wenn der letzte Status Wert eine 0 enthält,
mysql> SELECT `id`, UNIX_TIMESTAMP(`datum`) AS `timestamp` FROM `dznw` WHERE `status` = '1' AND `id` < 35 ORDER BY `id` DESC LIMIT 1;
+----+------------+
| id | timestamp |
+----+------------+
| 11 | 1232881200 |
+----+------------+
1 row in set (0.00 sec)
Was mach ich falsch
Kommentar