2017-07-05 17 views
0

我的要求很簡單,我有一箇中繼器控制Web部件,並且我想在WHERE子句中應用條件。獲取最新的一條記錄,將在其添加後的一週內顯示。之後,它將在頁面刷新時隨機顯示

條件:最新的一條記錄將在添加1周後顯示。之後,它將在頁面刷新時隨機顯示。

意思是如果記錄超過1周,則它將在頁面刷新時顯示最新的。

我做了這個查詢,但它不工作:

(DocumentCreatedWhen >= dateadd(day, -7, convert(date, getdate()))) 

enter image description here

+0

嗨,賈漢吉爾。是否有任何答案適合您,或者這仍然會給您帶來問題? – mnield

回答

1

我對你的要求的「關於頁面刷新」部分有點困惑。你在第一部分中說過,「之後它會在頁面刷新時隨機顯示」,然後在第二部分中說「如果記錄大於1周,它將在頁面刷新時顯示」

你想要什麼?

要過濾掉至少1周前發生的事件,你會做

DATEDIFF(日,DocumentCreatedWhen,GETDATE())> = 7

從那裏你可以做一個ORDER BY DocumentCreateWhen ASC ,並且頂部#爲1.

如果你想在回發上應用不同的邏輯,你可以使用宏和可見性在回發時使「隨機」中繼器可見,而另一個可見如果它不是回發,或使用宏根據回髮狀態提供不同的WHERE條件。

我無法找到默認的「IsPostback」宏,因此您必須創建一個自定義宏來返回當前的回髮狀態。

0

什麼,你需要使用是工會

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 

有很多子查詢的,但是這會給你的想法:)

1

在您的數據源上嘗試這些設置:

  • ORDER BY表達式:age DESC, NEWID()
  • WHERE條件: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 
, * 
相關問題