Visualizzazione risultati 1 fino 3 di 3

Discussione: SELECT record tra due date ... ed il precedente

  1. #1
    phollia non è connesso Utente giovane
    Data registrazione
    05-02-2015
    Messaggi
    68

    Predefinito SELECT record tra due date ... ed il precedente

    Buonasera

    ho una tabella in cui i singoli record sono identificati da un ID e il contenuto del record ha validità fra due date (impostate in altri campi)

    Codice:
    +----+------------+------------+-----
    | ID |     DAL    |     AL     |
    +----+------------+------------+-----
    |  1 | 2021-01-01 | 2021-01-15 | ...
    +----+------------+------------+-----
    |  2 | 2021-01-16 | 2021-02-28 | ...
    +----+------------+------------+-----
    |  3 | 2021-03-01 | 2021-04-01 | ...
    
    ...
    
    +----+------------+------------+-----
    | 11 | 2021-05-01 | 2021-05-15 | ...
    +----+------------+------------+-----
    | 12 | 2021-05-16 | 2021-06-15 | ...
    Ora a me interessa recuperare il record relativo ad una data specifica ed il precedente.

    Ad esempio, se cercassi il record relativo al 10 marzo 2021 dovrei ottenere la riga con ID 2 (la precedente a quella cercata) e quella con ID 3 (quella cercata).

    Con

    Codice:
    SELECT * FROM tabella WHERE DATE(DAL) <= '2021-03-10' AND DATE(AL) >= '2021-03-10'
    otterrei il rigo con ID = 3

    Come ottenere 2 e 3?

    Grazie

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Probabilmente la soluzione più semplice è recuperare i primi due record la cui data di validità di partenza è inferiore alla data desiderata, ordinati sulla stessa colonna in senso decrescente:
    Codice:
    SELECT * FROM tabella WHERE DATE(DAL) <= '2021-03-10' ORDER BY DAL DESC LIMIT 2;

    I suggerimenti che do più spesso:


  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Nel precedente esempio sarebbe lecito recuperare date precedenti o uguale al 2021-03-10, invece poiché AL è il contrario di DAL (stesso valore e con operatori di comparazioni opposti) sarà successivo o uguale al 2021-03-10.
    DAL il più piccolo e AL il più grande.
    Quindi avrai bisogno di una terza data AL <2021-05-15 (DAL 2021-02-28 MEDIO AL 2021-03-10) che è la vera fine. Poiché solitamente non è la formula al maggiore.
    Codice:
    SELECT * FROM tabella WHERE DATE(DAL)>=DATE_SUB('2021-03-10', INTERVAL 10 DAY) AND DATE(AL)<DATE_ADD('2021-03-10', INTERVAL 66 DAY) LIMIT 10
    Con i dati preesistenti http://forum.it.altervista.org/php-m...ml#post1472902 sarebbe 8 righe dal secondo resultset al resultset nono (se inferiore a 2020-05-15)
    Ultima modifica di darbula : 17-06-2021 alle ore 12.44.45

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •