Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [SQL Server] Selezionare dato minimo

    allora... mi collego ad un altra discussione che avevo aperto

    http://forum.html.it/forum/showthrea...readid=1398188

    per chiedere come effettuare una selezione:

    ho un db di un listino composto da diverse tabelle. in questo caso ho una tabella_prodotti con le specifiche degli articoli, e una tabella_listini che contiene i prezzi. in tabella_listini per ogni prodotto ci possono essere diversi prezzi che hanno particolari valità in base al periodo.
    Lo stesso prodotto oggi può costare 100 o 200 in un particolare periodo.

    uso una query del tipo:
    SELECT * FROM Listini WHERE data_inizio < getdate() and data_fine > getdate()

    per limitare i dati validi al livello di date.

    ora mi ritrovo ad esempio con 5 prezzi diversi (in base al tipo di listino), vorrei estrarre quello con il valore più basso

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    In questo caso SELECT * potrebbe non andar bene, dipende se:

    1. devi recuperare il prezzo più basso di UN SOLO articolo (un solo record)
    2. devi recuperare il prezzo più basso di OGNI articolo (un set di record)

    Questa differenza è fondamentale, e devi specificarla.

    Per ottenere il prezzo più basso si usa Min(prezzo).
    Nel primo caso è sufficiente indicare una ulteriore condizione WHERE articolo = <tuo_articolo>
    Invece nel secondo caso occorre un raggruppamento GROUP BY per articolo che ti restiuisca il Min(prezzo) per OGNI articolo.


  3. #3
    quello che mi serve è il secondo, devo recuperare il prezzo minimo per ogni articolo...

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quindi devi usare GROUP BY.

    Esempio, questa query restituisce il prezzo minimo di un prodotto (tabella PRODUCTS) per ogni categoria (categoryid):

    codice:
    SELECT  MIN(unitprice) AS minimo ,categoryid
    FROM products
    GROUP BY categoryid
    risultato:

    codice:
    minimo	categoryid
    4,5	1
    10	2
    9,2	3
    2,5	4
    7	5
    7,45	6
    10	7
    6	8

  5. #5
    Grazie così come l'hai scritta mi funziona perfettamente.

    ho però qualche problema.
    in group by devo mettere tutti i campi che richiamo con SELECT, il problema è che c'è anche un campo text, e sql mi da errore:

    ------------------
    SELECT tabella1.codice, MIN(tabella2.prezzo) as minimo, tabella3.descrizione
    FROM tabella1 INNER JOIN tabella2 ON tabella1.codice = tabella2.codice ecc...
    ...

    where (...confronto date...)
    Group By tabella1.codice, tabella3.descrizione
    ------------------

    tabella3.descrizione è un text

    Errore:
    "I tipi di dati text, ntext e image possono essere ordinati o confrontati esclusivamente quando si utilizza l'operatore IS NULL o LIKE."

    come risolvo?

    Grazie

  6. #6
    CASTando o CONVERTendo il campo

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Campo TEXT ????
    I campi di tipo TEXT sono deprecati da Microsoft, ovvero verranno rimossi.
    http://msdn.microsoft.com/it-it/library/ms187993.aspx

    Guarda qui
    http://www.dotnethell.it/forum/messa...ThreadID=29666

    e segui il suggerimento di Lorenzo Benaglia

    indicato anche da MItaly:
    http://forum.html.it/forum/showthread/t-1061212.html


  8. #8
    se il giovanotto ha ancora sql2000, non può far altro che usare text. da 2005 in su apprezzerà grandemente l'esistenza delle colonne varchar(max)

  9. #9
    hemm. il problema è che non posso modificare il tipo di dati. da questo database pesca anche il gestionale dell'azienda, e quindi è vietato toccare!

    cmq ho risolto come avete suggerito, con CAST

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.