你好我有我希望的是一个有趣的问题(好几个问题是准确的),我希望有人能帮助我。我目前正在从Crystal数据库中获取数据的Crystal Reports 2008中使用SQL。Oracle SQL - 最大和最小数量的记录列表
我需要获得在特定时间段内完成特定最小测试次数(例如超过10次测试)的员工列表。为了进一步解决这个问题,它必须是最近的10次测试,并且我还需要列出每个独特的测试参考。
我已经做了一个开始(参见第一段代码及其输出),它使用了行号()函数,但这只显示单个员工编号的10条最新信息,并且不检查是否需要已经进行了10次测试。
我还制作了另一段代码(请参阅第二段代码及其输出),其中包含一个计数功能,并且仅显示那些进行过至少10次测试的员工。
我真的需要在所需的输出表所示的情况:
所以我的问题/问题是:
是否有修改我的原代码,以便将更多的工作方式比一个职员号码?
是否有合并这两段代码的方法,以便它检查是否已完成所需数量的测试并仅显示符合所需条件的员工编号和测试引用(这是首选选项)?
我是否必须放弃这个想法并重新开始?
不幸的是我目前还没有对数据库管理员访问权限,不能创建任何新的数据表来存储此类数据,所以我需要这在一个SQL动作来完成的,如果可能的话。
我附上了一个电子表格,其中显示了可用数据的快照,如果这有帮助。
任何帮助,你可以给我,这将不胜感激。
WITH TESTNUMBER AS
(SELECT TESTER.STAFF_NO, TESTER.TEST_REF, PERIOD. DATE_OF_TEST, TESTSLOT.SLOT_TIME,
ROW NUMBER() OVER (ORDER BY TESTER.STAFF_NO DESC, PERIOD.DATE_OF_TEST DESC,
TESTSLOT.SLOT_TIME DESC)
AS RowNumber
FROM dB1.TEST_EVENT TESTER
INNER JOIN dB1.PERIOD PERIOD ON TESTER.PERIOD_ID=PERIOD.PERIOD_ID
INNER JOIN dB1.TEST_ SLOT_TIME TESTSLOT ON TESTER.SLOT_TIME_ID=TESTSLOT.SLOT_TIME_ID)
WHERE TESTER.STAFF_NO=405405 AND
(PERIOD.DATE_OF_TEST>={ts '2013-08-01 00:00:00'} AND
PERIOD.DATE_OF_TEST<={ts '2013-08-10 00:00:00'})
SELECT * FROM TESTNUMBER
WHERE RowNumber BETWEEN 1 AND 10;`
STAFF_NO TEST_REF DATE_OF_TEST SLOT_TIME
405405 01 05/08/2013 08:40:00
405405 02 05/08/2013 09:40:00
405405 03 05/08/2013 10:40:00
405405 04 06/08/2013 08:40:00
405405 05 06/08/2013 09:40:00
405405 06 06/08/2013 10:40:00
405405 07 06/08/2013 11:40:00
405405 08 07/08/2013 08:40:00
405405 09 07/08/2013 09:40:00
405405 10 07/08/2013 10:40:00
查询:
SELECT TESTER.STAFF_NO, count(TESTER.STAFF_NO) AS TOTALTESTS FROM
FROM dB1.TEST_EVENT TESTER
INNER JOIN dB1.PERIOD PERIOD ON TESTER.PERIOD_ID=PERIOD.PERIOD_ID
INNER JOIN dB1.TEST_ SLOT_TIME TESTSLOT ON TESTER.SLOT_TIME_ID=TESTSLOT.SLOT_TIME_ID)
WHERE (PERIOD.DATE_OF_TEST>={ts '2013-08-01 00:00:00'} AND PERIOD.DATE_OF_TEST<=
{ts '2013-08-10 00:00:00'})
GROUP BY TESTER.STAFF_NO
HAVING count(TESTER.STAFF_NO)>=10
ORDER BY TESTER.STAFF_NO DESC`
STAFF_NO TEST_REF
405405 12
366255 14
总体要求的输出
STAFF_NO TEST_REF DATE_OF_TEST SLOT_TIME
405405 03 05/08/2013 10:40:00
405405 04 06/08/2013 08:40:00
405405 05 06/08/2013 09:40:00
405405 06 06/08/2013 10:40:00
405405 07 06/08/2013 11:40:00
405405 08 07/08/2013 08:40:00
405405 09 07/08/2013 09:40:00
405405 10 07/08/2013 10:40:00
405405 11 08/08/2013 08:40:00
405405 12 08/08/2013 09:40:00
366255 17 06/08/2013 09:40:00
366255 18 06/08/2013 10:40:00
366255 19 06/08/2013 11:40:00
366255 20 06/08/2013 12:40:00
366255 21 09/08/2013 08:40:00
366255 22 09/08/2013 09:40:00
366255 23 09/08/2013 10:40:00
366255 24 09/08/2013 12:40:00
366255 25 09/08/2013 14:40:00
366255 26 09/08/2013 15:40:00
很抱歉,如果这看起来不是很专业,但我是新来这个。
再次感谢您的帮助。
你好OracleUser –
是@戴夫-69! –
你好,我试图通过这个评论张贴我的回应,并被告知它太长了,我会为此使用“回答你的问题”。 –