SQL查询,通过打印组号码太多记录
问题描述:
我有两个下表SQL查询,通过打印组号码太多记录
Emp_ID FirstName
------------------------------
1 John
2 Mark
3 Steve
表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
结果应打印像这样的(最早的无偿日期)
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
答
既然你没有提到你正在使用的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
但是如果你的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
+0
您正在使用什么[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'RDBMS'代表*关系数据库管理系统*。 'RDBMS是SQL'的基础,并且适用于所有现代数据库系统,如MS SQL Server,IBM DB2,Oracle,MySQL等...... – 2013-03-01 17:27:05
+0
以上查询工作,感谢您的帮助! – YDSWorld 2013-03-01 19:26:37
你的SQL是...? – 2013-03-01 17:18:53
除了Fuzzy Button先生的问题:您正在使用哪些DBMS?甲骨文? Postgres的? – 2013-03-01 17:19:55
有两个问题 - (1)你的数据库是什么? SQL Server? MySQL的?或者你想通过Linq这个吗?和(2)你尝试过什么?什么是你目前的SQL不起作用? – 2013-03-01 17:21:04