【发布时间】:2013-06-27 02:54:28
【问题描述】:
IF object_id('tempdb..#A') IS NOT NULL DROP TABLE #A
CREATE TABLE #A (Computer varchar(20), Name varchar(20), Month varchar(20))
INSERT INTO #A
SELECT 'PC1', 'Bob', 'June'
UNION ALL
SELECT 'PC1', 'Tammy', 'January'
UNION ALL
SELECT 'PC1', 'Wes', 'September'
UNION ALL
SELECT 'PC1', 'Susan', 'October'
UNION ALL
SELECT 'PC1', 'Kevin', 'February'
SELECT * FROM #A
这会产生结果:
Computer Name Month
PC1 Bob June
PC1 Tammy January
PC1 Wes September
PC1 Susan October
PC1 Kevin February
月份列是该月登录此计算机的最受欢迎用户。
我想显示最近登录的用户,但他们可能本月甚至上个月都没有登录。
在上面的例子中,如果今天是六月,我会选择 PC1 Kevin。
所以说真的,我想要一个函数返回一个指定月份相对于当前月份的数字 1-12。
如果今天是 6 月 26 日,那么
udf_month('June') would return 12
udf_month('May') would return 11
udf_month('January') would return 7
udf_month('December') would return 6
udf_month('July') would return 1
如果今天是 7 月 1 日,则 udf_month('June') 将返回 11
然后我可以执行 SELECT Computer, Name, Max(udf_Month(Month)) 来查找每台计算机的最新名称。
正确吗?
【问题讨论】:
-
但实际上,您应该只将整数存储在数据库中,而不是月份名称。
-
数据来自 Altiris 查询(软件管理数据库)
标签: sql sql-server sql-server-2008 user-defined-functions