Community FAQ
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
wdillner
Engaged Sweeper II
From one of the built-in reports, I created a simple report that gives me basic info about a filtered set of computers from our Lansweeper DB. I'd like to add a column that shows the current age of each computer in years (to one decimal place). I want to calculate the age based on the stored value for the purchase date of each system (tblAssetCustom.PurchaseDate). Can someone assist me? I'm not a SQL wiz. Here's my code so far:

Select Distinct Top 1000000 tsysOS.Image As Icon,
tblAssets.AssetID,
tblAssets.AssetName,
tblAssetCustom.Serialnumber As [Service Tag],
tblAssetCustom.Model As Model,
tblAssets.Processor As CPU,
Cast(tblAssets.Memory / 1024 As Numeric) As [RAM (GB)],
tblAssetCustom.PurchaseDate As [Ship Date]
From tblAssets
Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Where tblAssets.AssetName Like '%LABN110%'
Order By tblAssets.AssetName

Thanks!
1 ACCEPTED SOLUTION
RCorbeil
Honored Sweeper II
Try this:
Cast(DateDiff(dd, tblAssetCustom.PurchaseDate, GetDate()) / 365.2425 As numeric(8,1)) As Age

Breakdown:

Days between purchase date and now:
DateDiff(dd, tblAssetCustom.PurchaseDate, GetDate())
(Doing a DateDiff for years would truncate the result.)

Convert that to years:
/ 365.2425
(If you're not anal enough to care about accounting for leap centuries, you could stick with 365.25. )

Format it as numeric, rounded to one decimal place:
Cast(... As numeric(8,1))

View solution in original post

11 REPLIES 11
CyberCitizen
Honored Sweeper
This was a fairly old post, that being said I use a report based on the BIOS age, so we can work out how old our machines are.
sazza21
Engaged Sweeper
wdillner wrote:
From one of the built-in reports, I created a simple report that gives me basic info about a filtered set of computers from our Lansweeper DB. I'd like to add a column that shows the current age of each computer in years (to one decimal place). I want to calculate the age based on the stored value for the purchase date of each system (tblAssetCustom.PurchaseDate). Can someone assist me? I'm not a SQL wiz. Here's my code so far:

Select Distinct Top 1000000 tsysOS.Image As Icon,
tblAssets.AssetID,
tblAssets.AssetName,
tblAssetCustom.Serialnumber As [Service Tag],
tblAssetCustom.Model As Model,
tblAssets.Processor As CPU,
Cast(tblAssets.Memory / 1024 As Numeric) As [RAM (GB)],
tblAssetCustom.PurchaseDate As [Ship Date]
From tblAssets
Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Where tblAssets.AssetName Like '%LABN110%'
Order By tblAssets.AssetName

Thanks!



Hi,

can you post the full report after you amended it please?
sazza21
Engaged Sweeper
wdillner wrote:
From one of the built-in reports, I created a simple report that gives me basic info about a filtered set of computers from our Lansweeper DB. I'd like to add a column that shows the current age of each computer in years (to one decimal place). I want to calculate the age based on the stored value for the purchase date of each system (tblAssetCustom.PurchaseDate). Can someone assist me? I'm not a SQL wiz. Here's my code so far:

Select Distinct Top 1000000 tsysOS.Image As Icon,
tblAssets.AssetID,
tblAssets.AssetName,
tblAssetCustom.Serialnumber As [Service Tag],
tblAssetCustom.Model As Model,
tblAssets.Processor As CPU,
Cast(tblAssets.Memory / 1024 As Numeric) As [RAM (GB)],
tblAssetCustom.PurchaseDate As [Ship Date]
From tblAssets
Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
Where tblAssets.AssetName Like '%LABN110%'
Order By tblAssets.AssetName

Thanks!



Hi,

can you post the full report after you amended it please?
Jeroen_Proost
Engaged Sweeper
Thank you very much for this
RCorbeil
Honored Sweeper II
You can try using the chassis type if you like.
tblAssets -> tblSystemEnclosure -> tSysChassisTypes.ChassisName

Personally, I'm not a fan of that approach. There are multiple chassis types to root through.

I do a LEFT JOIN to tblPortableBattery, then use a CASE to distinguish desktops from laptops. If the asset has a portable battery, it's a laptop, if not, there is no entry in the battery table:
SELECT
...
CASE
WHEN tblPortableBattery.AssetID IS NULL
THEN 'Desktop'
ELSE 'Laptop'
END As DesktopOrLaptop,
...
FROM
tblAssets
LEFT JOIN tblPortableBattery ON tblPortableBattery.AssetID = tblAssets.AssetID
...

Jeroen_Proost
Engaged Sweeper
Thank you RC62N, I could have thought of that

Can I add a column so I can see if it's a laptop or desktop ?
RCorbeil
Honored Sweeper II
Did you remove the original poster's "Where tblAssets.AssetName Like '%LABN110%'" from the query?

Do your assets have something recorded in the PurchaseDate field?
Jeroen_Proost
Engaged Sweeper
I get a "this report has no results" when I'm using this

Even better would be if I could generate a report that shows desktops which are 5 years and older and laptops which are 4 years and older. If someone could help me with this, that would be great

Thank you very much,
wdillner
Engaged Sweeper II
That's perfect! Exactly what I was looking for. Thank you!

Reports & Analytics

Ask about reports you're interested in and share reports you've created. Subscribe to receive daily updates of reports shared in the Community.

New to Lansweeper?

Try Lansweeper For Free

Experience Lansweeper with your own data.
Sign up now for a 14-day free trial.

Try Now