comparazione con data precedente

max1974

Utente Attivo
7 Mar 2013
107
0
16
Salve a tutti mi aiutate per favore con Mysql
sto selezionando i rifornimenti fatti con un automezzo id_auto n° 1:
Codice:
SELECT id,REPLACE(DATE_FORMAT(dt,GET_FORMAT(DATE,'EUR')),'.','/') as gg, km, lt, prezzo FROM tb_auto_rifornimenti
                WHERE tb_auto_rifornimenti.id_auto='1'";
adesso vorrei sapere in riferimento al rifornimento precedente quanti km sono stati percorsi
es:
DataKMLitriEuro
03/01/2020952025.3948.89
11/01/2020996861.2377.85

quando inserisco il rifornimento del 11/01/2020 vorrei sapere che ha percorso 448 km dato dai km attuali meno i km del rifornimento precedente (9968-9520) e sapere il consumo medio dato dai km Percorsi diviso i litri di rifornimento.

volevo farlo con la query..... e stavo provando cosi, ma mi da errore, credo che il problema sia se non esiste il record precedente...
Codice:
SELECT qr.*, (qr.km-qrp.km) as KM_Percorsi FROM(
SELECT id,REPLACE(DATE_FORMAT(dt,GET_FORMAT(DATE,'EUR')),'.','/') as gg,km,lt,prezzo
FROM tb_auto_rifornimenti
WHERE tb_auto_rifornimenti.id_auto='1'
ORDER BY dt)qr
UNION
SELECT qrp.* FROM(
SELECT id,REPLACE(DATE_FORMAT(dt,GET_FORMAT(DATE,'EUR')),'.','/') as gg,km,lt,prezzo
FROM tb_auto_rifornimenti
WHERE tb_auto_rifornimenti.id_auto='1'
ORDER BY dt DESC LIMIT 1)qrp
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
non so se ho capito, in ogni caso ti posto una query e il suo risultato,
é una bozza ma contiene tutto quello che serve e puoi adattarla come vuoi
SQL:
SELECT
  t1.ID
, t1.Data
, t1.KM
, t1.Litri
, t1.Euro
, max(t2.Data)  as Pdata
, max(t2.KM)    as Pkm
, sum(t2.Litri) as Plitri
, sum(t2.Euro)  as Peuro
, t1.KM - max(t2.KM) as KMpercorsi
FROM tb_auto_rifornimenti t1
LEFT JOIN tb_auto_rifornimenti t2 ON t1.ID = t2.ID
AND t2.Data < t1.Data
WHERE t1.ID = 1
GROUP BY
  t1.ID
, t1.Data
, t1.KM
, t1.Litri
, t1.Euro
ORDER BY
  t1.ID
, t1.Data

RISULTATO

1580165513652.png


ps, tolto le chiocciole che avevo lasciato davanti ai nomi della tabella
 
Ultima modifica:

max1974

Utente Attivo
7 Mar 2013
107
0
16
non so se ho capito, in ogni caso ti posto una query e il suo risultato,
é una bozza ma contiene tutto quello che serve e puoi adattarla come vuoi
SQL:
SELECT
  t1.ID
, t1.Data
, t1.KM
, t1.Litri
, t1.Euro
, max(t2.Data)  as Pdata
, max(t2.KM)    as Pkm
, sum(t2.Litri) as Plitri
, sum(t2.Euro)  as Peuro
, t1.KM - max(t2.KM) as KMpercorsi
FROM tb_auto_rifornimenti t1
LEFT JOIN tb_auto_rifornimenti t2 ON t1.ID = t2.ID
AND t2.Data < t1.Data
WHERE t1.ID = 1
GROUP BY
  t1.ID
, t1.Data
, t1.KM
, t1.Litri
, t1.Euro
ORDER BY
  t1.ID
, t1.Data

RISULTATO

Vedi l'allegato 6917

ps, tolto le chiocciole che avevo lasciato davanti ai nomi della tabella
Grazie 1000 Marino51 ho modificato la tua query con i miei campi etc , ma credo di aver fatto qualche errore o ci sia qualche problema
Ecco come l'ho modificata
Codice:
SELECT t1.id,
    REPLACE(DATE_FORMAT(t1.dt,GET_FORMAT(DATE,'EUR')),'.','/') as gg,
    t1.km,
    t1.lt,
    t1.prezzo,
    REPLACE(DATE_FORMAT(t2.dt,GET_FORMAT(DATE,'EUR')),'.','/') as Pgg,
    max(t2.km) as Pkm,
    sum(t2.lt) as Plitri,
    sum(t2.prezzo) as Pprezzo,
    (t1.km-max(t2.km)) as KMpercorsi
    FROM tb_auto_rifornimenti t1
    LEFT JOIN tb_auto_rifornimenti t2 ON t1.id = t2.id AND t2.dt < t1.dt
    WHERE t1.id_auto = 1
    GROUP BY t1.id, t1.dt, t1.km, t1.lt, t1.prezzo
    ORDER BY t1.id, t1.dt
ecco il risultato.....
1580200922278.png


ti mando intera tabella per controllare...
Codice:
CREATE TABLE `tb_auto_rifornimenti` (
  `id` int(11) NOT NULL,
  `dt` date NOT NULL,
  `km` int(11) DEFAULT NULL,
  `lt` decimal(10,2) DEFAULT '0.00',
  `prezzo` decimal(10,2) DEFAULT '0.00',
  `id_auto` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `tb_auto_rifornimenti` (`id`, `dt`, `km`, `lt`, `prezzo`, `id_auto`) VALUES
(0, '2020-01-22', 10330, '41.23', '57.85', 1),
(1, '2020-01-03', 9520, '25.39', '48.89', 1),
(2, '2020-01-11', 9968, '61.23', '77.85', 1);
credo anche quel ORDER BY t1.id non sia corretto, in quanto potrei inserire un record successivo o precedente indipendentemente.
GRAZIE COME SEMPRE TROPPO GENTILE!!!
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
aspe forse il problema è nella join


Codice:
SELECT t1.id,
REPLACE(DATE_FORMAT(t1.dt,GET_FORMAT(DATE,'EUR')),'.','/') as gg,
t1.km,
t1.lt,
t1.prezzo,
REPLACE(DATE_FORMAT(t2.dt,GET_FORMAT(DATE,'EUR')),'.','/') as Pgg,
max(t2.km) as Pkm,
sum(t2.lt) as Plitri,
sum(t2.prezzo) as Pprezzo,
(t1.km-max(t2.km)) as KMpercorsi
FROM tb_auto_rifornimenti t1
LEFT JOIN tb_auto_rifornimenti t2 ON t1.id_auto = t2.id_auto AND t2.dt < t1.dt
WHERE t1.id_auto = 1
GROUP BY t1.id, t1.dt, t1.km, t1.lt, t1.prezzo
ORDER BY t1.dt
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@max1974

Quando posti codice PHP devi usare i tag [PHP]........[/PHP]non il tag [CODE].......[/CODE]
 
  • Like
Reactions: max1974

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
si il problema é nella join, l'ID é da intendersi IDauto non l'ID del record,
PHP:
LEFT JOIN tb_auto_rifornimenti t2 ON t1.id_auto = t2.id_auto AND t2.dt < t1.dt

credo anche quel ORDER BY t1.id non sia corretto
anche in questo caso andrebbe ordinato per IDauto e data nel caso tu selezionassi più auto contemporaneamente

in quanto potrei inserire un record successivo o precedente
ma tu stai trattando 1 record anche se composto (JOIN) con record diversi, devi sempre fare riferimento a lui, sia che leghi valori precedenti e/o successivi
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
Si Marino la tua osservazione è giustissima ma dato il caso che ho una
PHP:
WHERE t1.id_auto = 1
Significa che seleziono un auto alla volta ed in questo caso i vari
PHP:
GROUP BY t1.id_auto
ORDER BY t1.id_auto
secondo me nn hanno scopo di esistere...
Forse sto prendendo un abbaglio!!!!
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
secondo me nn hanno scopo di esistere...
GROUP BY t1.id_auto
tutte le volte che ci sono funzioni max. sum e simili, il group by é necessario per stabilire il livello a cui raggruppare quei valori,
altri motori di database, esempio ms sql server, oracle, vogliono il set completo dei valori non raggruppati
mysql é più lasco in questo senso, io preferisco sempre indicarli

ORDER BY t1.id_auto
non costa molto e la query é già pronta per altri impieghi (vedi ad esempio una lista mensile di controllo)

ORDER BY t1.id_auto, data
potrebbe essere necessario perché non é garantito che il db restituisca in ordine di data …..

ma poi vale il buon senso
 
Discussioni simili
Autore Titolo Forum Risposte Data
P [Javascript] Stranezza con comparazione OR Javascript 3
xone [MySQL] Comparazione data per sistema di prenotazioni MySQL 23
L Sito Comparazione quote Programmazione 0
C Comparazione date in italiano PHP 1
A Comparazione tra Php e jsp? PHP 3
IImanuII SQL Select from e comparazione. PHP 7
A [C] comparazione file di testo Programmazione 3
F access ricerca record con apostrofo. MS Access 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
C Come ricreare questo calcolatore di prezzi a step con woocommerce? WordPress 0
C Segnalo barra laterale di navigazione ASSENTE con Chrome Comunicazioni dallo Staff 5
G Guadagna dalla Vendita di Articoli Sponsorizzati con GuestPostMax.com! Guadagnare col Sito 0
P Hosting multidominio con Plesk Hosting 0
L Soluzione con INNER JOIN Database 0
S passare un valore da un form a un file .php con metodo post PHP 4
A Redirect 301 genera url statico con variabili Web Server 0
T problemi con dati menu a tendina HTML e CSS 2
T Query con date MS Access 1
F Url dinamiche da cambiare con categoria, subcategoria e title PHP 2
L Aiuto con DataGridView Visual Basic 1
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
M Aggiunta prodotti nel carrello con lo stesso in e varianti diverse PHP 0
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
B Non riesco a trovare i cognomi con i caratteri speciali in Access (Microsoft 365) MS Access 0
N Problema con position absolute e overflow HTML e CSS 4
M Estrarre soltanto i prodotti con stessa descrizione PHP 10
felino [Wordpress] Gallery con foto selezionabili dall'utente WordPress 0
G Invio di più valori con la stessa checkbox PHP 4
csi Inviare file jpg in locale alla stampante con php PHP 0
otto9due Proteggere una cartella e file con password tramite .htaccess e .htpasswd Web Server 0
I Form con selettore HTML e CSS 0
G phpmailer e php 8.1 con estensione mysqli PHP 6
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
N Vendo sito web di casino online con 1000 giochi Compravendita siti e domini 0
G form invio multiplo con checkbox PHP 12
L Query e selezione DB con $_POST PHP 2
K [PHP] Problema con variabili concatenate. PHP 1
R Dubbi su siti sviluppati con Wordpress e con codice WordPress 6
B Router e telecamere con pannello solare IP Cam e Videosorveglianza 0
Z Cerco ecommerce gratuito meglio se realizzato con Woocommerce di Wordpress. E-Commerce 0
S [CERCO] scambio di articoli con link Offerte e Richieste di scambio links 0
A Immagine decentrata con sfondo trasparente Photoshop 0
O problema con query PHP 4
Jensen Errore di sintassi con DELETE PHP 3
D Casella di testo con grassetto ecc... HTML e CSS 2
R Aprire maschera con Openform filtrando un campo testuale con un valore recuperato da un'altra maschera MS Access 10
G Query con i giorni della settimana MySQL 10

Discussioni simili