मुझे नहीं लगता कि आपके प्रश्न का स्पष्ट उत्तर संभव है। देखें #1869 :
शीर्षक प्रश्न का उत्तर देने के लिए, Sequelize स्वचालित रूप से एक सबक्वेरी उत्पन्न करेगा (उदाहरण के लिए, #1719 ), लेकिन आप एक कस्टम सबक्वेरी नहीं कर सकते। मेरे पास नकारात्मक के लिए आधिकारिक संदर्भ नहीं है।
ऐसा लगता है कि आपकी टेबल कुछ इस तरह है:
EssayStats
EssayId
EssayDate
WordCount
तब आप कुछ ऐसा कर सकते थे:
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']
});
यह जो कुछ भी कर रहा है वह दो SELECT क्वेरीज़ चला रहा है, उन प्रश्नों से MAX और MIN को अपनी रुचि के चर द्वारा ऑर्डर करने के बाद, और फिर अपना अंतर ले रहा है। इससे आपको वह मिलेगा जिसमें आप रुचि रखते हैं:सबसे हाल के संस्करण और पहले संस्करण के बीच शब्द गणना का अंतर।
यहाँ ट्रिक एक विशेषता फ़ील्ड में एक SELECT स्टेटमेंट को इनकैप्सुलेट करना है।
बेशक, यह बिल्ली के रूप में गन्दा है और शायद डिब्बाबंद sequelize.query
से ज्यादा बेहतर नहीं है . लेकिन यह आपके प्रश्न के सार का उत्तर देता है।
एक बेहतर उपाय यह हो सकता है कि आप अपने डेटा को कुछ सामान्य करें, और "वर्डकाउंटडेल्टा" को सीधे अपने निबंध मॉडल में स्टोर करें। तब आपके पास afterCreate
. हो सकता है हुक
फ़ील्ड को स्वचालित रूप से अपडेट करने के लिए। यह संभवतः सबसे तेज़ समाधान भी होगा।
मैंने कुछ इसी तरह का उत्तर दिया यहां ।