[英]sql simple Query with dates
我有一個時鍾應用程序,注冊雇員參加工作,
我試圖將“輸入” imageButton
(入口,例如“Timein”字段)的可見性設置為基於查詢隱藏
因此,如果在當前UserId
中具有TimeIn
最后一條記錄中沒有timeout
,則將隱藏Enter
按鈕
這是表:( tId
是PK IDENTITY)
所以基於這些記錄,例如,最后一個(前1個)沒有注銷,因此用戶不會看到允許用戶登錄的Enter button
,因為沒有TimeOut
最后一個動作
使用asp.net
C#
代碼我正在嘗試使用datedIff
作為查詢來解決方案:
但我想我錯過了一些東西
請不要考慮如果這是我想要展示的錯誤方法..我確實試過,如果有更好的方法來實現我需要的東西然后只是忽略該查詢
select isnull((SELECT TOP 1 case when [TimeOut] is null then '' else convert(nvarchar,[TimeOut]) end FROM tblTime WHERE datediff(day,TimeOut,getdate())=0 and UserId =3571 ORDER BY tId DESC),'')
這將找到userId具有最高tid的記錄。
SELECT CASE WHEN [TimeOut] IS NULL THEN '' ELSE CONVERT(NVARCHAR,[TimeOut]) END
FROM tblTime
WHERE tId = ( SELECT MAX(tId)
FROM tblTime
WHERE UserId = 3571
)
但ids不是獲取最新記錄的好選擇。 可能你想要更多這些方面的東西,但它取決於列的含義,如果可能有重復...:
SELECT CASE WHEN [TimeOut] IS NULL THEN '' ELSE CONVERT(NVARCHAR,[TimeOut]) end
FROM tblTime
WHERE UserId = 3571
AND ActiveDate = ( SELECT MAX(ActiveDate)
FROM tblTime
WHERE UserId = 3571
)
或者您可以將子查詢作為FROM子句的一部分。
如果您想明確地為此查詢(假設ActiveDate的含義是用戶最后在網站上活動的時間):
SELECT TOP 1
CASE WHEN TimeOut IS NULL THEN 0 ELSE 1 END
FROM tblTime
WHERE UserID = 3571
ORDER BY ActiveDate DESC
否則,如果您將整個對象加載到代碼中,只需檢查最近記錄的TimeOut是否為空。
我建議使用某種UserActivity表來跟蹤用戶登錄和退出的日期和時間。 通過查看空值來跟蹤用戶活動並不是最可靠的。
CREATE TABLE UserActivity
(
UserActivityID int,
UserActivityTypeID tinyint,
DateActivity datetime
)
UserActivityType
是另一個包含Sign In
和Sign Out
,您可能希望跟蹤其他內容。
格倫,你打敗了我! 以下內容將獲取最新TimeIn的記錄(假設沒有重復項)並將為您提供Y / N標志以確定是否顯示Enter按鈕。
SELECT (CASE WHEN t1.[TimeOut] IS NOT NULL THEN 'Y' ELSE 'N' END) AS is_enter_button_displayed
FROM tblTime t1
WHERE t1.[TimeIn] = (SELECT MAX(t2.[TimeIn]) FROM tblTime t2 WHERE t2.UserId = t1.UserId)
AND UserId = 3571;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.