Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
reacha
Starting Member
49 Posts |
Posted - 2010-10-29 : 15:36:40
|
| SELECT AUDIT.PKGID,AUDIT.PROCESSID, EVENT.NAME,AUDIT.AUDITSTAMPFROM AUDIT INNER JOINEVENT ON AUDIT.PROCESSID = EVENT.PROCESSID AND AUDIT.RESULTEVENTID = EVENT.EVENTIDWHERE (AUDIT.AUDITTYPE = 6) AND (AUDIT.AUDITMSG = 'Routed by user')and AUDIT.PROCESSID in (3,5)ORDER BY AUDIT.AUDITSTAMP DESC;the out of this query is like this100 3 attorney 2010-10-29 10:03:57100 3 agency 2010-10-29 09:49:16101 5 Error 2010-10-28 13:39:53101 5 queue 2010-10-28 12:34:58102 5 index 2010-10-27 10:34:58I need to eliminate the duplicates in this.Need to get the record which has maxtime in that.Output should be100 3 attorney 2010-10-29 10:03:57101 5 Error 2010-10-28 13:39:53102 5 index 2010-10-27 10:34:58 |
|
|
russell
Pyro-ma-ni-yak
5072 Posts |
Posted - 2010-10-29 : 15:46:22
|
| [code]SELECT a.PKGID, a.PROCESSID, e.NAME, a.AUDITSTAMPFROM AUDIT aINNER JOIN ( SELECT PKGID, PROCESSID, MAX(AUDITSTAMP) AUDITSTAMP FROM AUDIT GROUP BY PKGID, PROCESSID ) xOn x.PKGID = a.PKGIDAnd x.PROCESSID = a.PROCESSIDAnd x.AUDITSTAMP = a.AUDITSTAMPINNER JOIN EVENT eON a.PROCESSID = e.PROCESSID AND a.RESULTEVENTID = e.EVENTIDWHERE a.AUDITTYPE = 6AND a.AUDITMSG = 'Routed by user'and a.PROCESSID in (3,5)ORDER BY a.AUDITSTAMP DESC;[/code]can't tell from your explanation if you need to group and join on PROCESSID or just PKGID. If just PKGID, remove the stuff in red |
 |
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2010-10-29 : 16:34:23
|
You might also make use of a Ranking function. Here is an example:SELECT *FROM (SELECT AUDIT.PKGID, AUDIT.PROCESSID, EVENT.NAME, AUDIT.AUDITSTAMP, ROW_NUMBER() OVER(PARTITION BY AUDIT.PKGID ORDER BY AUDIT.AUDITSTAMP DESC) AS RowNumFROM AUDIT INNER JOINEVENT ON AUDIT.PROCESSID = EVENT.PROCESSID AND AUDIT.RESULTEVENTID = EVENT.EVENTIDWHERE (AUDIT.AUDITTYPE = 6) AND (AUDIT.AUDITMSG = 'Routed by user')and AUDIT.PROCESSID in (3,5)) AS TWHERE RowNum = 1ORDER BY AUDITSTAMP DESC |
 |
|
|
reacha
Starting Member
49 Posts |
Posted - 2010-10-29 : 16:48:54
|
| IN THE BELOW QUERY IF I MENTION THE DATE CRITERIA LIKESELECT *FROM (SELECT AUDIT.PKGID, AUDIT.PROCESSID, EVENT.NAME, AUDIT.AUDITSTAMP, ROW_NUMBER() OVER(PARTITION BY AUDIT.PKGID ORDER BY AUDIT.AUDITSTAMP DESC) AS RowNumFROM AUDIT INNER JOINEVENT ON AUDIT.PROCESSID = EVENT.PROCESSID AND AUDIT.RESULTEVENTID = EVENT.EVENTIDWHERE (AUDIT.AUDITTYPE = 6) AND (AUDIT.AUDITMSG = 'Routed by user')and AUDIT.PROCESSID in (3,5)) AS TWHERE RowNum = 1AND AUDITSTAMP >= CONVERT(varchar(10), GETDATE() - 12, 110)AND AUDITSTAMP < CONVERT(varchar(10), GETDATE() - 5, 110)ORDER BY AUDITSTAMP DESCI WAS GETTING THE NO OF RECORDS AS 281AND IF I MENTION LIKE THISSELECT *FROM (SELECT WF_AUDITLOG.PKGID, WF_AUDITLOG.PROCESSID, WF_EVENT.NAME, WF_AUDITLOG.AUDITSTAMP, ROW_NUMBER() OVER(PARTITION BY WF_AUDITLOG.PKGID ORDER BY WF_AUDITLOG.AUDITSTAMP DESC) AS RowNumFROM WF_AUDITLOG INNER JOINWF_EVENT ON WF_AUDITLOG.PROCESSID = WF_EVENT.PROCESSID AND WF_AUDITLOG.RESULTEVENTID = WF_EVENT.EVENTIDWHERE (WF_AUDITLOG.AUDITTYPE = 6) AND (WF_AUDITLOG.AUDITMSG = 'Routed by user')and WF_AUDITLOG.PROCESSID in (3,5)AND AUDITSTAMP >= CONVERT(varchar(10), GETDATE() - 12, 110)AND AUDITSTAMP < CONVERT(varchar(10), GETDATE() - 5, 110)) AS TWHERE RowNum = 1ORDER BY AUDITSTAMP DESCI WAS GETTING THE NO OF RECORDS AS 304WHAT IS THE DIFFERENCEPlease help me out!! |
 |
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2010-10-29 : 17:18:53
|
| In the first query, for a given PKGID the greatest date will fall outside of the data predicate. So, applying the WHERE clause in conjunction with the RowNum = 1 will filter out rows that would have fallen into that date range. |
 |
|
|
Lamprey
Master Smack Fu Yak Hacker
4614 Posts |
Posted - 2010-10-29 : 17:20:51
|
Here is a quick sample that may help to illustrate:DECLARE @Foo TABLE (ID INT, Num INT, CreateDate DATETIME)INSERT @Foo VALUES(1, 1, CURRENT_TIMESTAMP),(1, 2, CURRENT_TIMESTAMP + 1),(1, 3, CURRENT_TIMESTAMP - 1),(1, 4, CURRENT_TIMESTAMP + 2),(1, 5, CURRENT_TIMESTAMP - 2)-- See no RowNum = 1SELECT *FROM(SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY CreateDate DESC) AS RowNumFROM @Foo) AS TWHERE CreateDate BETWEEN CURRENT_TIMESTAMP - 1 AND CURRENT_TIMESTAMP + 1SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY CreateDate DESC) AS RowNumFROM @FooWHERE CreateDate BETWEEN CURRENT_TIMESTAMP - 1 AND CURRENT_TIMESTAMP + 1 |
 |
|
|
reacha
Starting Member
49 Posts |
Posted - 2010-10-29 : 17:51:59
|
| I need to use this query in crystal reports and need to mention the date criteria in the report.So when i mention the datecriteria in the report it places the date criteria in the outer query.I need to have lastweek and lastmonth date criteria in my reportThanks,reacha |
 |
|
|
|
|
|
|
|