DISTINCT

habe ich die möglichkeit in sql datetime in unix time umzuwandel/umzurechnen
bestimmt ...

Code:
postgres=# begin;
BEGIN
postgres=*# select now();
             now              
------------------------------
 2023-10-26 13:51:17.66441+00
(1 row)

postgres=*# select extract(epoch from now());
      extract      
-------------------
 1698328277.664410
(1 row)

postgres=*#
 
Werbung:
Noch mehr würde es bringen, wenn man jemandem öffentlich hilft - dann profitieren auch andere davon.
Sieht man ja an den Antworten einiger Mitglieder :-(

Habe aber geschrieben das man das Ergebnis posten sollte. Ich empfinde es immer als sehr unschön wenn man anderen
mit aller Gewalt zeigen möchte was sie nicht können und nicht deren Problem löst.

Sonst bin ich aber voll deiner Meinung

Gruß

Bernd
 
Davon abgesehen, daß es SYNTAKTISCH FALSCH ist (ich schreib es extra groß, damit Du es merkst): mit min(x) und GROUP BY ermittelst Du das Minimum gruppiert nach GROUP BY. We gesagt, es ist sowieso syntaktisch falsch, nur MySQL liefert etwas aus dem Zufallsgenerator und keine Fehlermeldung.

Wenn Du die Differenz zwische zwei Zeilen wissen willst (sortiert nach einem Merkmal und getrennt nach einem anderen Merkmal) brauchst Du ein OVER (PARTITION BY ... ORDER BY ...).
 
Um die den syntaxfehler noch mal als Demo zu zeigen:

Code:
mysql> create table mysql_fehler(a int, b int, c int);
Query OK, 0 rows affected (0,07 sec)

mysql> select a,b,max(c) from mysql_fehler;
+------+------+--------+
| a    | b    | max(c) |
+------+------+--------+
| NULL | NULL |   NULL |
+------+------+--------+
1 row in set (0,01 sec)

mysql>

Richtig wäre aber:

Code:
postgres=# create table mysql_fehler(a int, b int, c int);
CREATE TABLE
postgres=# select a,b,max(c) from mysql_fehler ;
ERROR:  column "mysql_fehler.a" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select a,b,max(c) from mysql_fehler ;
               ^
postgres=#
 
:) Einfach MySQL richtig konfigurieren und dann klapp es auch.

Nach dem Motto: Shit in Shit out

sql_mode=only_full_group_by ist das Zauberwort

Code:
mysql> use bernd
Database changed
mysql> create table mysql_fehler(a int, b int, c int);
Query OK, 0 rows affected (0.17 sec)

mysql> select a,b,max(c) from mysql_fehler;
ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'bernd.mysql_fehler.a'; this is incompatible with sql_mode=only_full_group_by
mysql>
 
ich hab ja schon mehrfach auf Window-Funktionen verwiesen ...

Code:
postgres=# create table demo(gruppe int, wert int);
CREATE TABLE
postgres=# insert into demo values (1, 10);
INSERT 0 1
postgres=# insert into demo values (1, 11);
INSERT 0 1
postgres=# insert into demo values (1, 20);
INSERT 0 1
postgres=# insert into demo values (2, 20);
INSERT 0 1
postgres=# insert into demo values (2, 30);
INSERT 0 1
postgres=# insert into demo values (3, 1);
INSERT 0 1
postgres=# insert into demo values (3, 2);
INSERT 0 1
postgres=# insert into demo values (3, 3);
INSERT 0 1
postgres=# insert into demo values (3, 6);
INSERT 0 1
postgres=# select gruppe, wert, wert - lag(wert) over (partition by gruppe order by wert) as differenz from demo;
 gruppe | wert | differenz 
--------+------+-----------
      1 |   10 |          
      1 |   11 |         1
      1 |   20 |         9
      2 |   20 |          
      2 |   30 |        10
      3 |    1 |          
      3 |    2 |         1
      3 |    3 |         1
      3 |    6 |         3
(9 rows)

postgres=# with tmp as (select gruppe, wert, wert - lag(wert) over (partition by gruppe order by wert) as differenz from demo) select * from tmp where differenz is null or differenz > 5;
 gruppe | wert | differenz 
--------+------+-----------
      1 |   10 |          
      1 |   20 |         9
      2 |   20 |          
      2 |   30 |        10
      3 |    1 |          
(5 rows)

postgres=#

Sowas in der Art suchst Du doch, oder?
 
Werbung:
Zurück
Oben