我的要求很簡單,我有一箇中繼器控制Web部件,並且我想在WHERE
子句中應用條件。獲取最新的一條記錄,將在其添加後的一週內顯示。之後,它將在頁面刷新時隨機顯示
條件:最新的一條記錄將在添加1周後顯示。之後,它將在頁面刷新時隨機顯示。
意思是如果記錄超過1周,則它將在頁面刷新時顯示最新的。
我做了這個查詢,但它不工作:
(DocumentCreatedWhen >= dateadd(day, -7, convert(date, getdate())))
我的要求很簡單,我有一箇中繼器控制Web部件,並且我想在WHERE
子句中應用條件。獲取最新的一條記錄,將在其添加後的一週內顯示。之後,它將在頁面刷新時隨機顯示
條件:最新的一條記錄將在添加1周後顯示。之後,它將在頁面刷新時隨機顯示。
意思是如果記錄超過1周,則它將在頁面刷新時顯示最新的。
我做了這個查詢,但它不工作:
(DocumentCreatedWhen >= dateadd(day, -7, convert(date, getdate())))
我對你的要求的「關於頁面刷新」部分有點困惑。你在第一部分中說過,「之後它會在頁面刷新時隨機顯示」,然後在第二部分中說「如果記錄大於1周,它將在頁面刷新時顯示」
你想要什麼?
要過濾掉至少1周前發生的事件,你會做
DATEDIFF(日,DocumentCreatedWhen,GETDATE())> = 7
從那裏你可以做一個ORDER BY DocumentCreateWhen ASC ,並且頂部#爲1.
如果你想在回發上應用不同的邏輯,你可以使用宏和可見性在回發時使「隨機」中繼器可見,而另一個可見如果它不是回發,或使用宏根據回髮狀態提供不同的WHERE條件。
我無法找到默認的「IsPostback」宏,因此您必須創建一個自定義宏來返回當前的回髮狀態。
什麼,你需要使用是工會
SELECT TOP 1 * FROM
(
-- Get the latest record
Union
-- Get random record
) as Result
例如,如果你得到菜單項:
SELECT TOP 1 * FROM
(
-- latest for this week
SELECT DocumentUrlPath, DocumentName, DocumentCreatedWhen from (
select top 1 DocumentNAme, DocumentUrlPAth, DocumentCreatedWhen FROM View_CONTENT_MenuItem_Joined
where DATEDIFF(day, DocumentCreatedWhen , GETDATE()) <= 7 Order BY DocumentCreatedWhen DESC) as LatestForThisWeek
UNION
-- random
SELECT DocumentUrlPath, DocumentName, DocumentCreatedWhen from (
select top 1 DocumentNAme, DocumentUrlPAth, DocumentCreatedWhen FROM View_CONTENT_MenuItem_Joined
ORDER BY NEWID()) as RandomizedRecords
) as Result
有很多子查詢的,但是這會給你的想法:)
在您的數據源上嘗試這些設置:
age DESC, NEWID()
DateDiff(day,DocumentCreatedWhen, GetDate()) >= 7
CASE WHEN DateDiff(day,DocumentCreatedWhen,GetDate()) = 7 THEN 1 ELSE 0 END AS age, *
這應該意味着,這是7天前的任何文件出現在列表的頂部,隨時爲您設置選擇前N頁至1
。所有其他文件更多比7天大將只是由NEWID()函數隨機排列。
顯然,*
位於列中,因此應該指定所需的列,而不是爲了性能原因而保留通配符。
我剛剛在Dancing Goat樣品上跑出了這個,它做了你所需要的(假設我已經正確理解)。
編輯: 值得注意。任何7天以前的東西都會留在那裏,直到它不是7天大。爲了完成這項工作,您需要跟蹤記錄已被顯示,以便您可以將其從結果集中排除。即你柱成爲這樣的事情:
CASE
WHEN (DateDiff(day,DocumentCreatedWhen,GetDate()) = 7 AND DocumentHasBeenShown=0 THEN 1
ELSE 0
END) AS age
, *
嗨,賈漢吉爾。是否有任何答案適合您,或者這仍然會給您帶來問題? – mnield