2017-05-12 2 views
0

Ich brauche einen Datensatz aus der Tabelle, um stündliche Transaktion in den letzten 24 Stunden zu zeigen.Winterschlaf Gruppe nach Datum Spalte im Zeitintervall

Ich benutze Winterschlaf, ich bin nicht in der Lage, Gruppe für Stunde. Genau muss ich Status für jede Stunde erhalten.

Beispiel.

For 1 hour 
status count 
S  1 
F  2 

gleich für nächste Stunde wie auf.

DrWalletId CrWalletId TransAmount Currency TransTime    Status 
29251  29620    50 INR   2017-03-30 18:34:41.397 N 
29251  29620    50 INR   2017-03-30 18:39:23.633 N 
29251  29620    50 INR   2017-03-30 18:40:52.027 N 
29251  29620    50 INR   2017-03-30 18:44:02.353 N 
29251  29620    50 INR   2017-03-30 18:48:43.087 N 
29251  29620    50 INR   2017-03-30 18:52:16.460 S 
29620  29251    50 INR   2017-03-30 19:14:56.937 S 
29620  29251    50 INR   2017-03-30 19:19:52.687 N 
29620  29251    50 INR   2017-03-30 19:22:34.270 N 
29620  29251    50 INR   2017-03-30 19:24:36.310 N 
29620  29251    50 INR   2017-03-30 19:31:33.430 N 
29620  29251    50 INR   2017-03-30 19:53:11.517 N 
29620  29251    50 INR   2017-03-30 19:54:25.627 F 
29620  29251    50 INR   2017-03-30 20:09:41.107 F 
29620  29251    50 INR   2017-03-30 20:21:12.873 N 
29620  29251    50 INR   2017-03-30 20:25:17.397 A 

Bitte vorschlagen, wie es

in Hibernate zu tun

Antwort

1

Sie verwenden können EXTRACT()

ich eine Abfrage für Ihr Verständnis erstellt haben, gehe ich davon aus, dass Sie JPA auch verwenden. Wenn nicht, können Sie es Ihren Bedürfnissen anpassen.

@Query("SELECT new com.example.HourlyTransactionStatus(CAST(EXTRACT(HOUR FROM (T.transTime - :referenceDate)) AS long), T.status, COUNT(T.status)) " + 
     "FROM Transactions T " + 
     "GROUP BY EXTRACT(HOUR FROM (T.transTime - :referenceDate)), T.status") 
List<HourlyTransactionStatus> getHourlyTransactionStatus(@Param("referenceDate") Date referenceDate); 

und ich habe ein Modell erstellt HourlyTransactionStatus

@AllArgsConstructor 
class HourlyTransactionStatus { 
    private Long hour; // hours passed from referenceDate 
    private String status; 
    private Long count; 
} 

gleiche Abfrage auf DB

select extract(hour from T.trans_time - '2017-03-30 00:00:00'), T.status, count(T.status) 
from test_so T 
group by extract(hour from T.trans_time - '2017-03-30 00:00:00'), T.status 

Ergebnisse von DB

date_part status count 
18  S  1 
18  N  5 
19  N  5 
19  F  1 
19  S  1 
20  A  1 
20  F  1 
20  N  1