需要在 ssis 中使用 returns 5 个随机行结果来自其他查询的查询
Need query to use in ssis that returns 5 random row results from other query
我不熟悉 SSIS 和复杂的 sql 语句。我正在尝试将 returns 人的查询与上个月的日期结合起来,然后获取这些结果并从中获得 5 个真正随机的行。
我在获得 5 个随机行之前的查询是:
SELECT
DISTINCT
isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '') as [Last]
,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
,isnull(dbo.fnRemovePatternFromString(p.Middle_Initial, '%[,-.'']%'), '') as [Middle]
,isnull(pf.Date_on_staff, '') as [Date on Staff]
,pf.Status_from_date
FROM person p
inner JOIN person_facilities pf ON p.Person_ID = pf.Person_ID
LEFT JOIN usr_FacultyMember fm ON p.Person_ID = fm.person_id
WHERE
pf.FacCode in ('s', 'H', 'E')
and
(
pf.Status_from_date >= (getdate()-31 )
and pf.Status_from_date < getdate()
)
return大约有 300 行,但每个月都会更改。
根据该结果,我需要从结果中随机获取 5 行。它不能是结果的顶部,也不能是结果的 1/5 处的 5 行。我想避免创建一个视图来将结果存储在 this example 中。
Tablesample 看起来不像我需要的,因为它不是随机的。
我正在尝试申请 this example, since it seems random, but I need to control the number of rows in the output. This 有类似的答案。
这是我喜欢这两个例子的部分:
(abs(cast((binary_checksum(*) * rand()) as int)) % 100) <10
我不确定如何控制输出,所以我只能从中得到 5 行。我正在考虑创建一个变量并将 10 需要的内容存储到 return 5 行,但我不确定该怎么做。有什么想法吗?
我正在查看 variable for count of rows,但我不确定我会用它做什么或如何在我的 rand 行中应用它。
我想这不一定是一个 sql 查询,但我仍然不确定如何在 ssis 中执行此操作。如果我必须创建一个视图,我可以,但我不想让视图使我的数据库混乱。
如果能帮助解决这个复杂的问题,我们将不胜感激。
更新:
这与 random-number-on-sql-without-using-newid 不同,因为我没有排除 newid 的顺序,我只是试图找到随机的 5 行 returned.
为什么不直接使用 top
/fetch
和 order by newid()
?
select top (5) t.*
from (<your query here>) t
order by newid();
可能有多个逻辑来实现一些随机化我想到了列 id/dates 上的模数。
SELECT
DISTINCT
isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '') as [Last]
,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
,isnull(dbo.fnRemovePatternFromString(p.Middle_Initial, '%[,-.'']%'), '') as [Middle]
,isnull(pf.Date_on_staff, '') as [Date on Staff]
,pf.Status_from_date
FROM person p
inner JOIN person_facilities pf ON p.Person_ID = pf.Person_ID
LEFT JOIN usr_FacultyMember fm ON p.Person_ID = fm.person_id
WHERE
pf.FacCode in ('s', 'H', 'E') order by MOD( sysdate-date,2 )
我不熟悉 SSIS 和复杂的 sql 语句。我正在尝试将 returns 人的查询与上个月的日期结合起来,然后获取这些结果并从中获得 5 个真正随机的行。
我在获得 5 个随机行之前的查询是:
SELECT
DISTINCT
isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '') as [Last]
,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
,isnull(dbo.fnRemovePatternFromString(p.Middle_Initial, '%[,-.'']%'), '') as [Middle]
,isnull(pf.Date_on_staff, '') as [Date on Staff]
,pf.Status_from_date
FROM person p
inner JOIN person_facilities pf ON p.Person_ID = pf.Person_ID
LEFT JOIN usr_FacultyMember fm ON p.Person_ID = fm.person_id
WHERE
pf.FacCode in ('s', 'H', 'E')
and
(
pf.Status_from_date >= (getdate()-31 )
and pf.Status_from_date < getdate()
)
return大约有 300 行,但每个月都会更改。
根据该结果,我需要从结果中随机获取 5 行。它不能是结果的顶部,也不能是结果的 1/5 处的 5 行。我想避免创建一个视图来将结果存储在 this example 中。
Tablesample 看起来不像我需要的,因为它不是随机的。
我正在尝试申请 this example, since it seems random, but I need to control the number of rows in the output. This 有类似的答案。 这是我喜欢这两个例子的部分:
(abs(cast((binary_checksum(*) * rand()) as int)) % 100) <10
我不确定如何控制输出,所以我只能从中得到 5 行。我正在考虑创建一个变量并将 10 需要的内容存储到 return 5 行,但我不确定该怎么做。有什么想法吗?
我正在查看 variable for count of rows,但我不确定我会用它做什么或如何在我的 rand 行中应用它。
我想这不一定是一个 sql 查询,但我仍然不确定如何在 ssis 中执行此操作。如果我必须创建一个视图,我可以,但我不想让视图使我的数据库混乱。
如果能帮助解决这个复杂的问题,我们将不胜感激。
更新: 这与 random-number-on-sql-without-using-newid 不同,因为我没有排除 newid 的顺序,我只是试图找到随机的 5 行 returned.
为什么不直接使用 top
/fetch
和 order by newid()
?
select top (5) t.*
from (<your query here>) t
order by newid();
可能有多个逻辑来实现一些随机化我想到了列 id/dates 上的模数。
SELECT
DISTINCT
isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '') as [Last]
,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
,isnull(dbo.fnRemovePatternFromString(p.Middle_Initial, '%[,-.'']%'), '') as [Middle]
,isnull(pf.Date_on_staff, '') as [Date on Staff]
,pf.Status_from_date
FROM person p
inner JOIN person_facilities pf ON p.Person_ID = pf.Person_ID
LEFT JOIN usr_FacultyMember fm ON p.Person_ID = fm.person_id
WHERE
pf.FacCode in ('s', 'H', 'E') order by MOD( sysdate-date,2 )