Solved

Count unique max versions

Posted on 2008-06-18
12
379 Views
Last Modified: 2013-11-21
Hi, the SQL statement below reports two lines from our SMS database as shown below

Microsoft Visio      10.0      96      
Microsoft Visio      11.0      56      

However, I know that out of the 96 V10.0 installations, 9 of them  have been upgraded to V11 so the actual figure should be 87.  The database however lists two entries for these upgraded machines, a line for V10 and a line for V11 so it's basically counting these 9 twice using the statement below/ above results.  

My question is - is there any way I can now modify the statement further to reduce the figure to 87 - basically asking it to take into account that it has been upgraded to V11 so is counted there, so not to count it twice!  Hope that makes sense!!   Many thanks in advance, Deborah.
SELECT     TOP (100) PERCENT dbo.vSMS_G_System_SoftwareProduct.ProductName, MAX(DISTINCT dbo.vSMS_G_System_SoftwareProduct.ProductVersion) 

                      AS Expr1, COUNT(DISTINCT dbo.vSMS_G_System_SoftwareProduct.ClientId) AS Expr2, dbo.vSMS_G_System_SoftwareProduct.ProductVersion

FROM         dbo.vSMS_G_System_SoftwareProduct INNER JOIN

                      dbo.v_R_System ON dbo.vSMS_G_System_SoftwareProduct.ClientId = dbo.v_R_System.ResourceID

GROUP BY dbo.vSMS_G_System_SoftwareProduct.ProductName, dbo.vSMS_G_System_SoftwareProduct.ProductVersion

HAVING      (dbo.vSMS_G_System_SoftwareProduct.ProductName = 'microsoft visio')

ORDER BY Expr2 DESC

Open in new window

0
Comment
Question by:happyappys
  • 5
  • 3
  • 3
  • +1
12 Comments
 
LVL 22

Expert Comment

by:dportas
ID: 21812872
How can we tell if an application was upgraded or whether both versions are still in use? Assuming there is an UninstalledDate or UpgradedDate just somewhere then just put that into a WHERE clause.

Do not use TOP (100) PERCENT in any query or view. It achieves nothing but causes plenty of confusion. TOP (100) PERCENT is just an unfortunate side effect of the query/view designer.
0
 

Author Comment

by:happyappys
ID: 21813016
Hi, the Top(10) percent was put in by sql server 2005 automatically, it does it every time.  There is no installed date or upgraded date, sms just trawles round PC's looking at what sofware is installed and basically makes a list of it.  I have checked on one of the users PC's the only reason I can assume that there's two entries in the database is because when Microsoft upgrades visio it leaves some files of the old version behind which SMS is registering.  Thanks.
0
 
LVL 2

Accepted Solution

by:
AntonyDN earned 250 total points
ID: 21813173
Hi,

This ought to do it, assuming your product version is numeric, or at least sequential in some way ....


SELECT ProductName

, ProductVersion

, COUNT(ClientId) AS NumOfInstallations

FROM 

	(SELECT dbo.vSMS_G_System_SoftwareProduct.ClientID

	, dbo.vSMS_G_System_SoftwareProduct.ProductName

	, MAX(dbo.vSMS_G_System_SoftwareProduct.ProductVersion) ProductVersion

	FROM dbo.vSMS_G_System_SoftwareProduct 

	INNER JOIN dbo.v_R_System

	ON dbo.vSMS_G_System_SoftwareProduct.ClientId = dbo.v_R_System.ResourceID

	WHERE  dbo.vSMS_G_System_SoftwareProduct.ProductName = 'microsoft visio'

	GROUP BY dbo.vSMS_G_System_SoftwareProduct.ClientId

	, dbo.vSMS_G_System_SoftwareProduct.ProductName

	)Z

GROUP BY ProductName, ProductVersion

Open in new window

0
 
LVL 11

Assisted Solution

by:aaronakin
aaronakin earned 250 total points
ID: 21813185
It's not really pretty, but give it a shot...
SELECT a.ProductName, a.ProductVersion, ISNULL(SUM(NumClients),0) AS NumClients

  FROM

      (

      SELECT ssp.ProductName, ssp.ProductVersion

        FROM dbo.vSMS_G_System_SoftwareProduct ssp

          INNER JOIN dbo.v_R_System s ON ssp.ClientId = s.ResourceID

        GROUP BY ssp.ProductName, ssp.ProductVersion

      ) a

    LEFT OUTER JOIN

      (

      SELECT ProductName, LatestProductVersion, COUNT(ClientId) AS NumClients

        FROM

            (

            SELECT ssp.ProductName, ssp.ClientId, MAX(ssp.ProductVersion) AS LatestProductVersion

              FROM dbo.vSMS_G_System_SoftwareProduct ssp

                INNER JOIN dbo.v_R_System s ON ssp.ClientId = s.ResourceID

              GROUP BY ssp.ProductName, ssp.ClientId

              ) c

        GROUP BY ProductName, LatestProductVersion

        ) b

      ON a.ProductName = b.ProductName AND a.ProductVersion = b.LatestProductVersion

  WHERE a.ProductName = 'microsoft visio'

  GROUP BY a.ProductName, a.ProductVersion

Open in new window

0
 
LVL 11

Expert Comment

by:aaronakin
ID: 21813230
It looks like AntonyDN's query works as well...just beat me to it. :-)

The one thing I added to mine is that I return the number of clients for ALL product versions, whether any clients have that version or not.  Not even sure if you will need this functionality.
0
 

Author Comment

by:happyappys
ID: 21813310
WOW, thanks guys that's amazing!!  Just one last question then - if I want this query to show ALL software installed rather than just Visio, do I just take the WHERE clause out?
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
LVL 11

Expert Comment

by:aaronakin
ID: 21813316
Yep!
0
 

Author Comment

by:happyappys
ID: 21813323
Oh, and yes aaronakin - I need to see individual count of versions too for each software product!
0
 
LVL 2

Expert Comment

by:AntonyDN
ID: 21813342
Yes ....
0
 
LVL 2

Expert Comment

by:AntonyDN
ID: 21813536
I'm not quite sure what you are after there - I think both queries will give number of versions installed.

If you want to see,
Product                NumOfVersions
Microsoft Visio,    2
then that's a different query

Can you clarify?
0
 

Author Comment

by:happyappys
ID: 21813588
It's OK, just removing the where clause gives me the answer, a line for each product and version and the count of them, thanks very much that's fab!! Debs
0
 

Author Closing Comment

by:happyappys
ID: 31468333
Great!!
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now