Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prisma2, groupBy Date

Tags:

prisma2

I need to group fields by date, I use Prisma 2, for example, filter all register in month, but I don't know how to do it in the case of a date

Eu preciso agrupar os campos com um intervalo de data, por exemplo todos os registros dentro de um mês!

an example filter by normal field

await this.record.groupBy({
        by: ['category'],
        where: {
            AND: [
                { user: id },
                { account: { in: accountsIds } },
                { category: { in: categoriesIds } },
                { operation },
            ],
        },
        sum: {
            amount: true,
        },
    });

this return me:

{ category: 27, sum: { amount: -45 } },  { category: 29, sum: { amount: 4400 } }

i'm grateful for any help!

desde já agradeço qualquer ajudar!

like image 759
Luiz Henrique Carvalho Martare Avatar asked May 21 '26 14:05

Luiz Henrique Carvalho Martare


1 Answers

Doing this with Prisma is definitely the hard way, even if its possible. Behind Prisma there is a database, which is more capable for jobs like this. For the example just assume this is postgresql.

For the particular problem, create a view, like

CREATE VIEW record_by_month AS
  SELECT date_trunc('month', YOURDATE) month,
  sum(amount) amount_by_month FROM YOURTABLE group by 1;

You have to add the other fields you need ofc. Create the prisma model, write the prisma query, and you are done.

More prismaish way, maybe it worths a try, (especially if you will write for this model many differnt queries with month group, like the above) to create a view for the particular date only:

CREATE VIEW record_by_month AS
  SELECT distinct YOURDATE id,
  date_trunc('month', YOURDATE) month FROM YOURTABLE;

Create a model, add it with @relation to the original table, and fiddle with groupBy and include, write something like by: [record_by_month.month] (not sure its possible in the current version). The clear advantage of this approach (if works), is that you don't have to duplicate too many parts of your model.

like image 174
n3ko Avatar answered May 28 '26 12:05

n3ko



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!