2017-09-20 5 views
0

I ont table où la colonne a des valeurs:Postgres - Trouver les enregistrements où LIKE et prendre MAX/UNION multiples

'2017-12-1', '2017-12-5', '2017-12-15', '2015-12-1', '2016-12-25', '2012-12-18' 

etc.

Maintenant, je veux sélectionner des lignes colonne LIKE '2017-12' et des lignes où la colonne union LIKE '2015-12'. Donc, pour LIKE '2017-12' je vais obtenir 3 enregistrements et pour LIKE '2015-12' je vais obtenir 1 enregistrement. Maintenant, je veux les UNION mais ne prendre que '2017-12-15' parce que c'est MAX. J'ai essayé ORDER BY LIMIT 1 mais cela ne fonctionne pas avec UNION.

Répondre

0

Cela a fonctionné pour moi, en supposant que la colonne stocke les dates en tant que type de caractère.

SELECT x,MAX(CAST(substring(x from 9 for 10) AS integer)) AS m 
FROM tmp1 WHERE substring(x from 1 for 7)='2015-12' OR substring(x from 1 for 7)='2017-12' 
GROUP BY x ORDER BY x desc LIMIT 1 

Si vous stockez un type de date:

SELECT x FROM tmp WHERE to_char(x,'YYYY-MM')='2017-12' OR to_char(x,'YYYY-MM')='2015-12' 
GROUP BY xORDER BY x desc LIMIT 1 

Hope it helps.

+0

Avez-vous lu ma question? J'ai besoin de 'UNION' de multiples' SELECT * FROM table WHERE colonne LIKE ORDER BY colonne LIMIT 1'. Sans la colonne 'ORDER BY LIMIT 1', l'union de plusieurs sélections fonctionne. – basic