2016-10-28 159 views
0

我得到了我的sql查詢工作,但是當我找到具有相同小時和分鐘的日期時,我無法使查詢工作。例如: enter image description hereMax(日期時間)忽略秒

在列「trans_date」我無法使用我的查詢,因爲與max(trans_date)我沒有得到任何結果,不知何故SQL是忽略秒。

這是我的完整的SQL語句:

SELECT till.code,art.description 
FROM [TCPOS4].[dbo].[transactions] as tra, 
TCPOS4.dbo.articles as art,[TCPOS4].[dbo].[trans_articles] as tro, 
[TCPOS4].[dbo].[tills] as till,[TCPOS4].[dbo].[shops] as shop 
where tra.till_id=till.id and shop.id=till.shop_id and tro.transaction_id=tra.id and 
art.id=tro.article_id and tra.trans_date =(select max(trans_date) 
from tcpos4.dbo.transactions as t2 where t2.till_id=tra.till_id and trans_date > '2016-10-26 00:00:0.000' and trans_date< '2016-10-27 00:00:00.000') 
group by till.code,art.description 

與此查詢我正在從2016年10月26日至2016年10月27日的最高TRANSACTION_DATE每個「代碼」,但我不從代碼「5446」獲取任何信息。我應該得到「TABLE CHOCOLECHE-CONGUITOS」,因爲它是範圍內的最大trans_date。

+0

是該範圍內的TRANS_DATE '2016年10月26日00:00:0.000' 到 '2016年10月27日00:00:00.000' 獨家?你沒有得到什麼日期? – Cato

+2

我想這個問題是在'INNER JOIN'周圍的某個地方。傾向於使用顯式連接語法,而不是「通過逗號和謂詞在哪裏」來連接oldschool。 –

+0

該行的日期是圖片中的第一張,與其他日期幾乎相同。我認爲問題出在那裏,因爲我一直在做實驗,並且出現錯誤,我有相同的時間和分鐘。那麼,我沒有錯誤,查詢只是忽略了代碼'5446' – talendguy

回答

0

嘗試

...CAST(tra.trans_date AS DATE) = (select CAST(max(trans_date) AS DATE)... 
+0

這是行不通的。 – talendguy

+0

您需要進行實驗,刪除一些條件並找出哪些條件阻止它出現 - 我們沒有什麼信息可以繼續 - 是導致它不出現的其他條件之一 - 如果刪除日期條件完全,或使其始終如一 - 行是否出現在列表中呢? – Cato

+0

我一直在試驗這個查詢,並且我意識到問題是由於日期。這個查詢正在幫助我處理所有事情,當一行中的小時和分鐘是相同的時候,我只有問題。最大(日期)忽略從我的datetype秒,不知道爲什麼。 – talendguy

1

您就可以使用以下不同的方法嘗試一下呢?

SELECT code, description 
FROM 
(
    SELECT till.code, art.description, 
    row_number() OVER (PARTITION BY till.code ORDER BY trans_date DESC) RowNum 
    FROM [TCPOS4].[dbo].[transactions] AS tra 
    LEFT JOIN [TCPOS4].[dbo].[tills] AS till 
    ON tra.till_id=till.id 
    LEFT JOIN [TCPOS4].[dbo].[shops] AS shop 
    ON shop.id=till.shop_id 
    LEFT JOIN [TCPOS4].[dbo].[trans_articles] AS tro 
    ON tro.transaction_id=tra.id 
    LEFT JOIN TCPOS4.dbo.articles AS art 
    ON art.id=tro.article_id 
) sbt 
WHERE RowNum=1 

以這種方式,即使您有相同的確切日期,每個till.code也會得到一個結果。

如果需要,您可以在ORDER BY中添加更多字段。

編輯:在PARTITION BY中刪除art.description。

編輯2:與LEFT轉換JOIN

+0

這是行不通的,結果是一樣的 – talendguy

+0

你可以嘗試刪除art.description在PARTITION BY? – Lucbert

+0

仍然是相同的。 – talendguy

相關問題