Agréger des données dans un tableau en fonction de la date


MonsieurUnDeux

J'essaie d'agréger les données en fonction de l'horodatage. Fondamentalement, je voudrais créer un tableau pour chaque jour.

Alors disons que j'ai une requête comme ceci:

SELECT date(task_start) AS started, task_start 
  FROM tt_records
  GROUP BY started, task_start
  ORDER BY started DESC;

La sortie est :

+------------+------------------------+
| started    | task_start             |
|------------+------------------------|
| 2021-08-30 | 2021-08-30 16:45:55+00 |
| 2021-08-29 | 2021-08-29 06:47:55+00 |
| 2021-08-29 | 2021-08-29 15:41:50+00 |
| 2021-08-28 | 2021-08-28 12:59:20+00 |
| 2021-08-28 | 2021-08-28 14:50:55+00 |
| 2021-08-26 | 2021-08-26 20:46:44+00 |
| 2021-08-24 | 2021-08-24 16:28:05+00 |
| 2021-08-23 | 2021-08-23 16:22:41+00 |
| 2021-08-22 | 2021-08-22 14:01:10+00 |
| 2021-08-21 | 2021-08-21 19:45:18+00 |
| 2021-08-11 | 2021-08-11 16:08:58+00 |
| 2021-07-28 | 2021-07-28 17:39:14+00 |
| 2021-07-19 | 2021-07-19 17:26:24+00 |
| 2021-07-18 | 2021-07-18 15:04:47+00 |
| 2021-06-24 | 2021-06-24 19:53:33+00 |
| 2021-06-22 | 2021-06-22 19:04:24+00 |
+------------+------------------------+

Comme vous pouvez le voir, la startedcolonne a des dates qui se répètent.

Ce que j'aimerais avoir c'est :

+------------+--------------------------------------------------+
| started    | task_start                                       |
|------------+--------------------------------------------------|
| 2021-08-30 | [2021-08-30 16:45:55+00]                         |
| 2021-08-29 | [2021-08-29 06:47:55+00, 2021-08-29 15:41:50+00] |
| 2021-08-28 | [2021-08-28 12:59:20+00, 2021-08-28 14:50:55+00] |
| 2021-08-26 | [2021-08-26 20:46:44+00]                         |
| 2021-08-24 | [2021-08-24 16:28:05+00]                         |
| 2021-08-23 | [2021-08-23 16:22:41+00]                         |
| 2021-08-22 | [2021-08-22 14:01:10+00]                         |
| 2021-08-21 | [2021-08-21 19:45:18+00]                         |
| 2021-08-11 | [2021-08-11 16:08:58+00]                         |
| 2021-07-28 | [2021-07-28 17:39:14+00]                         |
| 2021-07-19 | [2021-07-19 17:26:24+00]                         |
| 2021-07-18 | [2021-07-18 15:04:47+00]                         |
| 2021-06-24 | [2021-06-24 19:53:33+00]                         |
| 2021-06-22 | [2021-06-22 19:04:24+00]                         |
+------------+--------------------------------------------------+

J'ai besoin d'une requête pour y parvenir. Merci.

un cheval sans nom

Vous pouvez utiliser array_agg()

SELECT date(task_start) AS started, array_agg(task_start)
FROM tt_records
GROUP BY started
ORDER BY started DESC;

Si vous voulez un tableau JSON, plutôt qu'un tableau Postgres natif, utilisez à la jsonb_agg()place

Articles connexes


Agréger un tableau de dicts en fonction de la valeur

bien au chaud89 Révision data = [[{'type': 'low', 'count': 100}, {'type': 'medium', 'count': 45}, {'type': 'high', 'count': 5}], [{'type': 'medium', 'count': 45}, {'type': 'high', 'count': 5}], [{'type': 'low', 'count': 100}, {'type': 'medium', 'count': 45}]]