我有一個帶有「日期」列的表。每個日期可能會出現多次。如何僅選擇出現< k次的日期?SQL查詢幫助:選擇出現一定次數的行
4
A
回答
5
select dates
from table t
group by dates having count(dates) < k ;
希望它適用於ORACLE。 HTH
8
SELECT * FROM [MyTable] WHERE [Date] IN
(
SELECT [Date]
FROM [MyTable]
GROUP By [Date]
HAVING COUNT(*) < @Max
)
請參閱@ [SQLMenace]的迴應。這與此非常相似,但根據數據庫的不同,假設優化器沒有實質性改變,他的JOIN運行速度可能會更快。
3
使用COUNT聚合:
SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k
2
對於 「出現x次」 查詢時最好使用HAVING子句。在你的情況,查詢可以像:
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k
,或者在您需要選擇不同的日期等欄目:
SELECT * FROM Table WHERE Date IN (
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k)
您也可以重寫IN到INNER JOIN,但是這不會提高性能,因爲實際上,查詢優化器將在大多數RDBMS中爲您執行此操作。具有日期索引肯定會提高此查詢的性能。
1
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k
然後來獲得原始數據傳回:
SELECT table.*
FROM table
INNER JOIN (
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k) dates ON table.date = dates.date
1
假設你使用的是Oracle,而k = 5: -
select date_col,count(*)
from your_table
group by date_col
having count(*) < 5;
如果你的約會專欄時間填寫並且您希望忽略它,請修改查詢,使其看起來如下所示: -
select trunc(date_col) as date_col,count(*)
from your_table
group by trunc(date_col)
having count(*) < 5;
2
例如
DECLARE @Max int
SELECT @Max = 5
SELECT t1.*
FROM [MyTable] t1
JOIN(
SELECT [Date]
FROM [MyTable]
GROUP By [Date]
HAVING COUNT(*) < @Max
) t2 on t1.[Date] = t2.[Date]
0
您可能無法直接檢測DateField來算,如果你的日期包括倍。您可能需要首先轉換爲年/月/日格式,然後再進行計數。
否則您的計數將會關閉,因爲通常只有極少數記錄具有完全相同的時間。
相關問題
- 1. MySql的選擇查詢幫助 - 如何算次查詢出現了數
- 2. SQL查詢選擇幫助需要
- 3. 需要SQL選擇查詢幫助
- 4. 幫助選擇查詢
- 5. MySQL查詢 - 幫助選擇
- 6. SQL選擇最後一次出現的行和計數出現次數
- 7. 幫助制定SQL查詢
- 8. 幫助選擇計數查詢
- 9. SQL選擇查詢幫助。連續四行的最大總和。
- 10. 幫助一個SQL查詢
- 11. 幫助一個SQL查詢
- 12. 幫助一個SQL查詢
- 13. SQL選擇出現x次值的行
- 14. SQL查詢幫助 - 位數
- 15. SQL查詢幫助 - 爲每個ID選擇非空值(多行)
- 16. 幫助sql查詢查詢
- 17. MySQL查詢幫助:秀場出現次數及外觀比例
- 18. 創建查詢需要幫助,總結出現次數在表
- 19. T-SQL查詢幫助 - 選擇唯一分組?
- 20. SQL - 需要幫助建立一個選擇查詢
- 21. SQL查詢幫助
- 22. SQL查詢幫助
- 23. 幫助SQL查詢
- 24. SQL - 查詢幫助
- 25. SQL查詢幫助
- 26. 幫助SQL查詢
- 27. 幫助SQL查詢
- 28. SQL查詢幫助
- 29. SQL查詢幫助
- 30. SQL - 查詢幫助
upvote因爲連接可能比我的IN()子句更快 – 2008-09-19 20:05:08