sql >> Database >  >> RDS >> Mysql

vind opeenvolgende transactie binnen 10 minuten

Op basis van het formaat van uw datums in de tabel, moet u ze converteren met STR_TO_DATE om ze in een query te gebruiken. Als uw kolom is eigenlijk een datetime type, en dat is gewoon uw weergavecode die dat formaat uitvoert, vervang gewoon STR_TO_DATE(xxx, '%m/%d/%Y %k:%i') in deze zoekopdracht met xxx .

De manier om bestellingen binnen 10 minuten na elkaar te vinden, is door zelf aan uw tafel te schuiven op user_id , order_id en de tijd op de tweede bestelling valt binnen de tijd van de eerste bestelling en 10 minuten later:

SELECT t1.user_id, t1.create_time AS order1_time, t2.create_time AS order2_time
FROM transactions t1
JOIN transactions t2 ON t2.user_id = t1.user_id
                    AND t2.order_id != t1.order_id
                    AND STR_TO_DATE(t2.create_time, '%m/%d/%Y %k:%i') BETWEEN
                           STR_TO_DATE(t1.create_time, '%m/%d/%Y %k:%i') 
                       AND STR_TO_DATE(t1.create_time, '%m/%d/%Y %k:%i') + INTERVAL 10 MINUTE

Uitgang:

user_id     order1_time     order2_time
101         4/2/2018 8:34   4/2/2018 8:37
103         4/2/2018 9:32   4/2/2018 9:36
106         4/2/2018 13:11  4/2/2018 13:18

Demo op dbfiddle



  1. Hoe het verschil tussen twee datums in MySQL te berekenen?

  2. Koppeling implementeren in PHP-foreach-lus

  3. Afkappen met voorwaarde

  4. Reader-oplossingen voor de uitdaging van Special Islands