sql >> Databasteknik >  >> RDS >> Mysql

Är det möjligt att göra en underfråga med Sequelize.js?

Jag tror inte att ett rent svar på din fråga är möjligt. Se #1869 :

För att svara på rubrikfrågan genererar Sequelize automatiskt en underfråga (t.ex. #1719 ), men du kan inte göra en anpassad underfråga. Jag har ingen auktoritativ referens för ett negativt.

Det ser ut som att ditt bord är ungefär så här:

EssayStats
    EssayId
    EssayDate
    WordCount

Då kan du göra något så här:

return EssayStat.findAll({
    attributes: [
        [sequelize.literal('((SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" DESC LIMIT 1) - (SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" ASC LIMIT 1))'), 'difference'],
        'EssayId'
    ],
    group: ['EssayId']
});

Allt som det gör är att köra två SELECT-frågor, ta MAX och MIN från dessa frågor efter att ha sorterat efter din variabel av intresse, och sedan ta din skillnad. Det ger dig det du är intresserad av:skillnaden i antal ord mellan den senaste versionen och den första versionen.

Tricket här är att kapsla in en SELECT-sats i ett attributfält.

Naturligtvis är det rörigt som fan och förmodligen inte så mycket bättre än den konserverade sequelize.query . Men det svarar på kärnan i din fråga.

En bättre lösning kan vara att denormalisera dina data en del och lagra "wordCountDelta" i din uppsatsmodell direkt. Då kan du ha en afterCreate hook för att automatiskt uppdatera fältet. Det skulle med största sannolikhet också vara den snabbaste lösningen.

Jag svarade på något liknande här .



  1. PL/SQL-samling:Kapslad tabell i Oracle-databas

  2. DBMS_APPLICATION_INFO.SET_CLIENT_INFO fungerar inte

  3. Hur man producerar en csv-utdatafil från lagrad procedur i SQL Server

  4. Rails autotilldelnings-id som redan finns