362 messaggi dal 08 dicembre 2006
Buonasera,
ho questa query:
SELECT _timestamp, PRESS_REAL FROM OPC.VARIABLES WHERE DESCRIPTION = 'opz1' AND timestamp BETWEEN '2018-07-11 6:00' AND '2018-07-11 14:00' 

Questa query mi serve per alimentare un grafico. Quello che vorrei è che potrebbe capitare di avere dei dati, ad esempio, dalle ore 8.00, e, nella fascia oraria che non ce ne sono, avere per il campo PRESS_REAL valore NULL.
Nello specifico,
_timestamp      |PRESS_REAL 
2018-07-11 6:00 | null
2018-07-11 8.10 | 123


Spero di essermi spiegato.

Grazie in anticipo!
59 messaggi dal 12 febbraio 2016
Ciao, prova con questa:

SELECT _timestamp,  ISNULL(PRESS_REAL,'NULL')  AS P_REAL FROM OPC.VARIABLES WHERE DESCRIPTION = 'opz1' AND timestamp BETWEEN '2018-07-11 6:00' AND '2018-07-11 14:00' 



Ovviamente devi usare il field "P_REAL".
Ciao
362 messaggi dal 08 dicembre 2006
Ciao e grazie per la risposta!
Non và. Prima di tutto, non l'ho specificato, ma uso MySql, per cui ho dovuto modificare la riga in questo modo:
ISNULL(PRESS_REAL) AS P_REAL
.
Poi il risultato che ottengo è comunque la restituzione di valori a partire dal primo inserimento utile, nel mio caso dalle ore 8.00.
Vorrei, ad esempio, impostando un orizzonte temporale dalle 6.00 alle 14.00, che PRIMA del valore utile restituito, ci sia una riga con valori NULL. Questo perchè nel controllo chart che utilizzo, la spline viene tracciata a partire dalle ore 8.00, lasciando uno spazio vuoto prima. Non so se l'approccio che perseguo è giusto...si accettano suggerimenti anche su questo ;)

Grazie!
10.903 messaggi dal 09 febbraio 2002
Contributi
Ciao,
penso sia un problema relativo allo specifico caso d'uso. Io una volta l'ho risolto lato client, inserendo nell'array javascript gli orari mancanti, prima di darlo in pasto al grafico. La complessità di risolvere il problema lato client è nettamente inferiore rispetto al risolverla lato server.

ciao,
Moreno
Modificato da BrightSoul il 12 luglio 2018 13.21 -

Enjoy learning and just keep making
salve,
personalmente NON ho capito la richiesta...
intendi che l'ordinamento deve avere PRIMA i valori NULL e poi gli altri?
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
362 messaggi dal 08 dicembre 2006
Buongiorno Andrea, cerco di spiegarmi meglio.
Dopo aver impostato un orizzonte temporale come questo: [data da:12/07/2018 6:00] e [data a:12/07/2018 14:00] nella query, recupero tutti i valori dal campo PRESS_REAL. E fino a qui tutto elementare.
In pratica vorrei che le due date "data da" e "data a" fossero le due "label" di inizio e file orizzonte temporale. Può capitare che se facessi una select con questo orizzonte temporale, il primo dato utile relativo a PRESS_REAL sia avvenuto alle 12/07/2018 8:36. Detta proprio brutalmente, io vorrei vedere la data e ora di inizio, [data da:12/07/2018 6:00] anche se non ci sono valori in PRESS_REAL , e, se ci sono record salvati dopo 2/3 ore ad es., li visualizzo.

Idem al contrario. Posso avere valori in PRESS_REAL salvati fino alle 10:00, ma io vorrei comunque avere una finestra temporale fino alle 14.00, e il questo caso visualizzare NULL.

Spero si capisca...grazie!
Modificato da inactive il 12 luglio 2018 16.56 -
salve,

non so se ho ben compreso... data una popolazione tipo
2017-07-12 05:59 | x (NO)
2017-07-12 08:36 | 1
2017-07-12 10:02 | 5
2017-07-12 16:02 | x (NO)

vuoi un'estrazione da 2017-07-12 06:00 a 2017-07-12 16:00 compresi e, nel caso 2017-07-12 06:00 NON sia presente, vuoi comunque la proiezione di {2017-07-12 06:00 | NULL}, e lo stesso per il termine del time frame

in questo caso, in Transact-SQL, personalmente farei una UNION di tutti i valori presenti nel time frame + 2017-07-12 06:00 | NULL + 2017-07-12 16:00 | NULL
di seguito ordinerei il risultato per il valore secondo la partizione temporale... in SQL Server NULL viene sempre ordinato come valore "piu' piccolo", quindi "giocherei" con la valorizzazione dell'attributo temporale per rendere il valore ordinalmente fuori range... in questo modo avrei per ogni time frame una valorizzazione reale con ordinale 1 (e valorizzazione fittizia aggiunta con ordinale uguale alla cardinalita' della partizione) oppure solo il valore fittizio in sua assenza, con ordinale sempre uguale a 1...
fatto questo, potrei filtrare tale risultato per le sole righe con ordinale partizionato = 1
trivialmente,
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.data (
  dt datetime,
  value int
  );
GO
--INSERT INTO dbo.data
--  VALUES ( '2018-07-12 06:00', 1);

INSERT INTO dbo.data
  VALUES ( '2018-07-12 06:36', 1);

INSERT INTO dbo.data
  VALUES ( '2018-07-12 08:36', 1);
GO
DECLARE @twin1 datetime = '2018-07-12 06:00';
DECLARE @twin2 datetime = '2018-07-12 16:00';

WITH cteBase AS (
  SELECT d.dt, d.value
    FROM dbo.data d
    WHERE d.dt BETWEEN @twin1 AND @twin2    
  UNION 
    SELECT @twin1 AS [dt], NULL AS [value]
  UNION 
    SELECT @twin2 AS [dt], NULL AS [value]
  ),
cteFil AS (
  SELECT c.dt, c.value, ROW_NUMBER() OVER (PARTITION BY c.dt ORDER BY CASE WHEN c.value IS NULL THEN DATEADD(S, 1, @twin2) ELSE c.dt END ) AS [rn]
    FROM cteBase c
  )
  SELECT *
    FROM cteFil c
    WHERE c.rn = 1
    ORDER BY c.dt
  
  
GO
DROP TABLE dbo.data;
--<-------
dt                      value       rn
----------------------- ----------- ---
2018-07-12 06:00:00.000 NULL        1
2018-07-12 06:36:00.000 1           1
2018-07-12 08:36:00.000 1           1
2018-07-12 16:00:00.000 NULL        1


in MySQL, non saprei come tradurlo :D

mi sorge poi il dubbio sulla possibilita' di risultati multipli per la stessa frazione temporale... ci sono piu' valorizzazioni??

salutoni
Modificato da Andrea Montanari il 12 luglio 2018 17.35 -

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
362 messaggi dal 08 dicembre 2006
Grazie Andrea e grazie ancora per la risposta.
Non esiste la possibilità di risultati multipli nella stessa frazione temporale, per cui và bene così.

Devo solo fare il "porting" a MySql...speriamo bene!!

p.s.
a chi può servire un OnLine query converter: http://www.sqlines.com/online

Grazie ancora!

Gianni
Modificato da inactive il 12 luglio 2018 17.48 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.