Question

Cela a probablement été discuté avant (il est trop simple), mais je ne peux pas trouver une réponse facile: Comment cela se fait: sélectionner la première date future (simple) et la date la plus récente par id

t1:             ==?==>         (earliest)  (most recent)
|id|date(DESC)|          |id|future_date  |   past_date   |
+==+==========+          +==+=============+===============+
|1 |  d1      |          | 1|       d1    |        d3     |
|2 |  d2      |          | 2|       d2    |        d6     |
           (<==now)      | 3|             |        d4     |
|1 |  d3      |
|3 |  d4      |
|1 |  d5      |
|2 |  d6      |

Je pensais le long des lignes de ce qui suit, mais j'ai le sentiment que c'est la syntaxe plutôt compliquée / mauvaise, et je ne l'ai pas compris comment limiter aux résultats individuels (par exemple le plus récent / à l'avenir le plus proche). Toutes les suggestions?

 SELECT t_1.id,t_1.date AS future_date,t_2.date AS past_date 
    FROM (SELECT * FROM t1 WHERE t1.date>CURRENT_TIMESTAMP) t_1
    LEFT OUTER JOIN 
    (SELECT TOP 1 * FROM t1 WHERE t1.date<CURRENT_TIMESTAMP) t_2 
    ON t_1.id=t_2.id
Était-ce utile?

La solution

Je pense que vous pouvez utiliser:

   SELECT x.id,
          MIN(y.date) AS future_date,
          MAX(z.date) AS past_date
     FROM (SELECT DISTINCT t.id
             FROM YOUR_TABLE t) x
LEFT JOIN YOUR_TABLE y ON y.id = x.id
                      AND y.date > CURRENT_TIMESTAMP
LEFT JOIN YOUR_TABLE z ON z.id = x.id
                      AND z.date < CURRENT_TIMESTAMP
 GROUP BY x.id

On ne sait pas quelle base de données vous travaillez avec - TOP est TSQL / SQL Server syntaxe uniquement (2000+), tandis que NOW NOW() est pris en charge par MySQL et PostgreSQL ... CURRENT_TIMESTAMP est ANSI et pris en charge par tous

Autres conseils

pourquoi pas ce travail?

select min(date) past_date,max(DATE)future_date
from t1
HAVING MIN(date) < CURRENT_TIMESTAMP AND MAX(DATE) < CURRENT_TIMESTAMP
group by id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top