如何将convert/simulateExcel公式转化为SQL查询
How to convert/simulate Excel formula into SQL Query
我使用下面的 sql 查询从 SQL 数据库中提取了一些数据到 Excel,然后在 excel 中我添加了另外两个列及其各自的公式如下分析。现在我正在尝试将这些 excel 公式添加到我的 sql 查询中,作为我遇到问题的 2 列,您能否建议我如何将上述两个公式添加到我的 sql查询。
非常感谢。
- 超过 2 个月 公式 =
IF(上次访问日期>今天()-(365/6),"","Older than 2 months")
- 持续时间检查公式=IF(LastAccessDate-FirstAccessedDate=0,"Never
登录”,LastAccessDate-FirstAccessedDate)
Sql 查询:
SELECT s.DomainName as UserId
,s.fullname as FullName
,MIN(DATEADD(HH,DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn)) [FirstAccessAt]
,MAX(DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())),A.CreatedOn)) [LastAccessAt]
--Tried on my own
--,DATEPART(MM,DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))AS [Month]
--,(MAX(DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))> -6, GETDATE()) [OlderThan6Months]
FROM archive a
INNER JOIN Systemuser s
ON s.systemuserid = a.objectid
WHERE a.action = 54
and a.CreatedOn between '2015-05-22 00:00:00.000' and '2016-11-23 00:00:00.000'
GROUP BY s.FullName,s.DomainName --DATEPART(MM,DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))
ORDER BY [LastAccessAt] desc
1.超过 2 个月 公式 = IF(LastAccessDate>TODAY()-(365/6),"","Older than 2 months")
在 TSQL 中:
CASE WHEN DateDiff(Month,LastAccessDate,GetDate()) >2
那么 'Older Than 2 months'
否则为空
结束为 ColumnName
2。时长检查公式=IF(LastAccessDate-FirstAccessedDate=0,"Never Logged On",LastAccessDate-FirstAccessedDate)
在 TSQL 中:
CASE WHEN (LastAccessDate-FirstAccessDate)=0
那么 'Never Logged On'
ELSE (LastAccessDate-FirstAccessDate)
结束为 ColumnName
试试这个:
DECLARE @FirstAccessDate DATETIME;
DECLARE @LastAccessDate DATETIME;
DECLARE @Today DATETIME;
SET @FirstAccessDate = '20160920';
SET @LastAccessDate = '20160922';
SET @Today = '20161122';
SELECT CASE WHEN DATEADD(MONTH, 2, @LastAccessDate) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths,
CASE WHEN @FirstAccessDate = @LastAccessDate THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, @FirstAccessDate, @LastAccessDate) AS VARCHAR(20))
END AS Duration;
SET @LastAccessDate = '20160921';
SET @FirstAccessDate = '20160921';
SELECT CASE WHEN DATEADD(MONTH, 2, @LastAccessDate) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths ,
CASE WHEN @FirstAccessDate = @LastAccessDate THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, @FirstAccessDate, @LastAccessDate) AS VARCHAR(20))
END AS Duration;
因此您的查询应如下所示:
SELECT
UserId,
FullName,
FirstAccessAt,
LastAccessAt,
CASE WHEN DATEADD(MONTH, 2, LastAccessAt) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths,
CASE WHEN FirstAccessAt = LastAccessAt THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, FirstAccessAt, LastAccessAt) AS VARCHAR(20))
END AS Duration
FROM (
SELECT
s.DomainName as UserId,
s.fullname as FullName,
MIN(A.CreatedOn) AS FirstAccessAt,
MAX(A.CreatedOn) AS LastAccessAt
FROM archive a
INNER JOIN Systemuser s
ON s.systemuserid = a.objectid
WHERE
a.action = 54
and a.CreatedOn between '2015-05-22 00:00:00.000' and '2016-11-23 00:00:00.000'
GROUP BY
s.FullName, s.DomainName
) t
ORDER BY LastAccessAt DESC
是的,只需在两个语句之间添加一个逗号并替换
'Column Name'
具有独特的名称。
我使用下面的 sql 查询从 SQL 数据库中提取了一些数据到 Excel,然后在 excel 中我添加了另外两个列及其各自的公式如下分析。现在我正在尝试将这些 excel 公式添加到我的 sql 查询中,作为我遇到问题的 2 列,您能否建议我如何将上述两个公式添加到我的 sql查询。
非常感谢。
- 超过 2 个月 公式 = IF(上次访问日期>今天()-(365/6),"","Older than 2 months")
- 持续时间检查公式=IF(LastAccessDate-FirstAccessedDate=0,"Never 登录”,LastAccessDate-FirstAccessedDate)
Sql 查询:
SELECT s.DomainName as UserId
,s.fullname as FullName
,MIN(DATEADD(HH,DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn)) [FirstAccessAt]
,MAX(DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())),A.CreatedOn)) [LastAccessAt]
--Tried on my own
--,DATEPART(MM,DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))AS [Month]
--,(MAX(DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))> -6, GETDATE()) [OlderThan6Months]
FROM archive a
INNER JOIN Systemuser s
ON s.systemuserid = a.objectid
WHERE a.action = 54
and a.CreatedOn between '2015-05-22 00:00:00.000' and '2016-11-23 00:00:00.000'
GROUP BY s.FullName,s.DomainName --DATEPART(MM,DATEADD(HH,(DATEDIFF(HH,GetUTCDate(),GetDate())), A.CreatedOn))
ORDER BY [LastAccessAt] desc
1.超过 2 个月 公式 = IF(LastAccessDate>TODAY()-(365/6),"","Older than 2 months")
在 TSQL 中:
CASE WHEN DateDiff(Month,LastAccessDate,GetDate()) >2 那么 'Older Than 2 months' 否则为空 结束为 ColumnName
2。时长检查公式=IF(LastAccessDate-FirstAccessedDate=0,"Never Logged On",LastAccessDate-FirstAccessedDate)
在 TSQL 中:
CASE WHEN (LastAccessDate-FirstAccessDate)=0 那么 'Never Logged On' ELSE (LastAccessDate-FirstAccessDate) 结束为 ColumnName
试试这个:
DECLARE @FirstAccessDate DATETIME;
DECLARE @LastAccessDate DATETIME;
DECLARE @Today DATETIME;
SET @FirstAccessDate = '20160920';
SET @LastAccessDate = '20160922';
SET @Today = '20161122';
SELECT CASE WHEN DATEADD(MONTH, 2, @LastAccessDate) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths,
CASE WHEN @FirstAccessDate = @LastAccessDate THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, @FirstAccessDate, @LastAccessDate) AS VARCHAR(20))
END AS Duration;
SET @LastAccessDate = '20160921';
SET @FirstAccessDate = '20160921';
SELECT CASE WHEN DATEADD(MONTH, 2, @LastAccessDate) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths ,
CASE WHEN @FirstAccessDate = @LastAccessDate THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, @FirstAccessDate, @LastAccessDate) AS VARCHAR(20))
END AS Duration;
因此您的查询应如下所示:
SELECT
UserId,
FullName,
FirstAccessAt,
LastAccessAt,
CASE WHEN DATEADD(MONTH, 2, LastAccessAt) >= @Today THEN NULL
ELSE 'Older than 2 months'
END AS IsOlderThanTwoMonths,
CASE WHEN FirstAccessAt = LastAccessAt THEN 'Never Logged On'
ELSE CAST(DATEDIFF(DAY, FirstAccessAt, LastAccessAt) AS VARCHAR(20))
END AS Duration
FROM (
SELECT
s.DomainName as UserId,
s.fullname as FullName,
MIN(A.CreatedOn) AS FirstAccessAt,
MAX(A.CreatedOn) AS LastAccessAt
FROM archive a
INNER JOIN Systemuser s
ON s.systemuserid = a.objectid
WHERE
a.action = 54
and a.CreatedOn between '2015-05-22 00:00:00.000' and '2016-11-23 00:00:00.000'
GROUP BY
s.FullName, s.DomainName
) t
ORDER BY LastAccessAt DESC
是的,只需在两个语句之间添加一个逗号并替换 'Column Name' 具有独特的名称。