简体   繁体   English

SQL查询,分组依据打印太多记录

[英]SQL Query , Group by Prints too many records

I have two following tables 我有以下两个表

Emp_ID   FirstName
------------------------------
1            John
2            Mark
3            Steve

table 2 : Emp_Transaction 表2:Emp_Transaction

Trans ID    Emp_ID    start_Date  End_date    Paid_status  Total_Hours     Total_Pay
---------------------------------------------------------
1               1     01/07/13    01/14/2013     True       15.00       75.00
2               1     01/15/13    01/21/2013     False      10.00       50.00
3               1     01/21/13    01/27/2013     False      10.00       50.00

4               2     01/07/13    01/14/2013     False      15.00       75.00
5               2     01/15/13    01/21/2013     False      10.00       50.00
6               2     01/21/13    01/27/2013     False      10.00       50.00

7               3     01/07/13    01/14/2013     True       15.00       75.00
8               3     01/15/13    01/21/2013     True       10.00       50.00
9               3     01/21/13    01/27/2013     False      10.00       50.00

Result should print like this ( oldest unpaid date) 结果应这样打印(最早的未付款日期)

ID  FirstName   start_Date  End_date    Paid_status  Total_Hours     Total_Pay
--------------------------------------------------------------
1             John      01/15/13    01/21/2013   False      10.00       50.00            
2             Mark      01/07/13    01/14/2013   False      15.00       75.00            
3             steve     01/21/13    01/27/2013   False      10.00       50.00

Since you haven't not mention the RDBMS you are using, the query below works almost on all RDBMS ( not all ) 由于您没有提到正在使用的RDBMS,因此以下查询几乎适用于所有RDBMS( 并非全部

SELECT  a.*, b.*
FROM    users a
        INNER JOIN Emp_transaction b
            ON a.Emp_ID = b.Emp_ID
        INNER JOIN
        (
            SELECT  Emp_ID, MIN(start_DATE) min_date
            FROM    emp_transaction
            WHERE   Paid_Status = 'False'
            GROUP   BY Emp_ID
        ) c ON b.Emp_ID = c.Emp_ID AND
                b.start_date = c.min_DATE

But if your RDBMS Supports Window Functions , 但是,如果您的RDBMS支持Window Functions

SELECT  a.*,
        b.TransID, b.start_Date, b.End_date, 
        b.Paid_status, b.Total_Hours, b.Total_Pay
FROM    users a
        INNER JOIN
        (
            SELECT  TransID, Emp_ID, start_Date, End_date, Paid_status, Total_Hours, Total_Pay,
                    ROW_NUMBER() OVER (PARTITION BY Emp_ID ORDER BY start_Date ASC) rn
            FROM    emp_transaction
            WHERE   Paid_status = 'False'
        ) b ON a.Emp_ID = b.Emp_ID AND
                b.rn = 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM