2009-10-21 90 views
1

假設您僅限於使用此語法(不能使用MAX或MIN等聚合函數,也不能使用GROUP BY子句;請勿「不問我爲什麼):運行沒有GROUP BY和聚合函數的查詢

{SQL query} ::= SELECT [DISTINCT | ALL] [TOP {integer}] 
       {select_list} 
       FROM {table_reference} 
       [WHERE {search_condition}] 
       [ORDER BY {orderby} { ',' {orderby} } ] 

假設我們有一個ITEM表,其中標識符被稱爲ITEM_ID。對於給定的ITEM_ID,您可以有多個具有相同ITEM_ID但不同SHIP_DATE的行。你如何編寫一個查詢,只返回具有最新SHIP_DATE的ITEMS給定的前面的語法?

我已經嘗試使用TOP N(檢索結果集中的第一行)與ORDER BY(從最大SHIP_DATE到最小SHIP_DATE排序)結合使用。任何想法或建議?

我想什麼是這樣的:

SELECT TOP N * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

其實前面的查詢似乎是工作,但我不知道是否有更好的方式來做到這一點。

這不是功課,我需要使用支持FileNet P8的語法創建一個查詢:http://publib.boulder.ibm.com/infocenter/p8docs/v4r5m1/index.jsp?topic=/com.ibm.p8.doc/developer_help/content_engine_api/guide/query_sql_syntax_ref.htm

+0

「它不起作用」不起作用。請更確切地說明你所嘗試的是什麼,你的期望以及你得到了什麼。 – 2009-10-21 00:11:30

+0

謝謝,我再澄清一點。 – 2009-10-21 00:23:36

+0

更正,它應該是TOP N而不是TOP 1 – 2009-10-21 02:09:20

回答

1

假設ITEM.ship_date不屬於同一日期的任何其他項目的記錄:

SELECT TOP x 
     i.item_id, 
     i.ship_date 
    FROM ITEM i 
ORDER BY i.ship_date DESC 

...其中x是唯一/獨特ITEM.item_id記錄數。你怎麼會沒有能夠使用COUNT ...

你必須使用ORDER BY i.ship_date DESC爲了在結果集的頂部有最新的ship_date記錄。

+0

我用這種方法結束了,謝謝! – 2009-10-28 16:32:35

0

是您的語法嚴格的,因爲它似乎在那裏,或者可以明顯對比均在每列的基礎上指定?舉例來說,你可以做這樣的事情:

SELECT ship_date, DISTINCT item_id FROM tablename ORDER BY ship_date; 

,如果是這樣,那麼這項工作?

如果沒有,你能嵌套查詢嗎? (即使用子查詢代替table_reference)

+0

起初看起來很有希望,但是當我嘗試查詢時......我發現DISTINCT不支持那種方式,它以這種方式工作(元組級別,而不是列級別): SELECT DISTINCT ship_date,item_id FROM tablename ORDER BY發貨日期; 但這不是我所需要的。謝謝! – 2009-10-23 22:35:01

+0

任何想法,如果你能嵌套查詢呢? – Amber 2009-10-24 00:55:09

1

你只是想要絕對最新ship_date的一個項目?如果是的話那麼你的查詢是完全正確的:

SELECT TOP 1 * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

唯一的問題可能是,如果SHIP_DATE是粗糙的東西(如日曆日期),而不是罰款(如日期時間),那麼你可以有關係。在這種情況下,你的數據庫引擎只是選擇其中一個,你不會提前知道它將如何解決這個問題。因此,您可能需要考慮在訂單中添加另一列,以使其成爲確定性的。

+0

對不起,我應該說TOP N – 2009-10-21 02:07:51

1
select distinct item_id from item 
where ship_date = 
    (select top 1 ship_date from item order by ship_date desc) 
+0

這隻會讓你得到ship_date等於最近日期的記錄。 **所有**項目必須在該日期發貨,同時如果在'ITEM.ship_date'上使用DateTime數據類型 – 2009-10-21 00:54:34