sql >> Databasteknik >  >> RDS >> Mysql

hitta på varandra följande transaktioner inom 10 minuter

Baserat på formatet på dina datum i tabellen måste du konvertera dem med STR_TO_DATE att använda dem i en fråga. Om din kolumn är faktiskt en datetime typ, och det är bara din visningskod som matar ut det formatet, ersätt bara STR_TO_DATE(xxx, '%m/%d/%Y %k:%i') i den här frågan med xxx .

Sättet att hitta beställningar inom 10 minuter från varandra är att själv gå med i ditt bord på user_id , order_id och tiden för den andra beställningen ligger inom tiden för den första beställningen och 10 minuter senare:

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

Utdata:

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 på dbfiddle



  1. Oracle Infoga Välj med beställning efter

  2. MySQL SELECT-funktion för att summera aktuell data

  3. Java2MySQL> Kommunikationslänkfel på grund av underliggande undantag igen

  4. Hur kan jag skriva ut SQL-frågan som körs efter att Perls DBI har fyllt i platshållarna?