Ενεργός ερώτημα Εγγραφή για να βρει τους γονείς με το παιδί μέσα σε ένα εύρος ημερομηνιών και το παιδί πριν από την εύρος ημερομηνιών

ψήφοι
0

Χρειάζομαι μια ενεργή ερώτημα ρεκόρ που επιστρέφει το πλήθος των γονέων με παιδί που δημιουργήθηκε μέσα σε ένα εύρος ημερομηνιών και ένα παιδί που δημιουργήθηκαν πριν από το εύρος ημερομηνιών.

Έχω σήμερα τα ακόλουθα δύο ερωτήματα: Αυτό το ερώτημα επιστρέφει το πλήθος των γονέων με παιδί που δημιουργήθηκαν εντός του εύρους ημερομηνιών

Parent.joins(:children).where(children.created_at BETWEEN ? AND ?, start, end).distinct.count(parent_id)

Αυτό το ερώτημα μετράει τις γονείς με παιδί που δημιουργήθηκαν πριν από το εύρος ημερομηνιών

Parent.joins(:children).where(children.created_at < ?, start).distinct.count(:parent_id)

Πρέπει να βρω τον αριθμό των γονέων που έχουν παιδί που δημιουργήθηκε στην περιοχή και ένα παιδί που δημιουργήθηκαν πριν από το εύρος.

Πώς είναι ο καλύτερος τρόπος για να πάρετε αυτό το αποτέλεσμα;

Δημοσιεύθηκε 09/10/2019 στις 18:56
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

Μπορείτε να το κάνετε αυτό με τους εξής τρόπους,

Απλό τρόπο, να πάρει τις ταυτότητες για τη μητρική από το πρώτο ερώτημα και να εφαρμόσει το φίλτρο σε μητρική id στο δεύτερο ερώτημα,

 q1_pids = Parent.joins(:children)
                 .where("children.created_at BETWEEN ? AND ?", start, end)
                 .ids
 count = Parent.joins(:children)
               .where("children.created_at < ?", start)
               .where(id: q1_pids)
               .count("parents.id")

χρησιμοποιώντας Τομή

q1 = Parent.joins(:children)
           .where("children.created_at BETWEEN ? AND ?", start, end)

q2 = Parent.joins(:children)
           .where("children.created_at < ?", start)

count = (q1 & q1).count

Δεύτερη λύση χρησιμοποιεί μόνο σειρά διασταύρωση , ωστόσο, μπορείτε να ετοιμάσετε τη δήλωση SQL τον εαυτό σας να βάλει φωτιά σε ένα και μόνο ερώτημα SQL στη βάση δεδομένων.

Απαντήθηκε 09/10/2019 στις 19:27
πηγή χρήστη

ψήφοι
1

Η επέκταση @ απάντηση Sujan, μπορείτε να φέρω όλες τις εγγραφές σε ένα ερώτημα, καθώς και.

Parent.joins(:children)
      .joins('INNER JOIN children AS before_start_children ON before_start_children.parent_id = parents.id')
      .where(children: {created_at: start..end})
      .where("before_start_children.created_at < ?", start)
      .distinct
      .count(parent_id)
Απαντήθηκε 09/10/2019 στις 19:21
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more