1. 程式人生 > >SQL 找出一個表中各個分類的前三條記錄

SQL 找出一個表中各個分類的前三條記錄

SQL2000的寫法一:


select QuestionId,CategoryId,Title  from QA_Questions a where 
a.QuestionId
<=
(
selectmax(c.QuestionId) from 
(
selecttop3  QuestionId  from QA_Questions b where b.CategoryId=a.CategoryId) c)
orderby CategoryId


SQL2000的寫法二:
select a.questionid,a.categoryid
from dbo.QA_Questions a
where Questionid in (
selecttop3 Questionid from QA_Questions where categoryid=a.categoryid 
orderby Questionid desc)orderby a.categoryid asc



SQL2005的寫法:

WITH NewTable AS(
SELECT*,RANK() OVER(PARTITION BY  CategoryId OrderBY  QuestionId) RANK
 
FROM  QA_Questions)
SELECT*FROM NewTable
WHERE RANK <4


---以下是時間測試,結果為189:266

declare@t
datetime ;set@t=getdate()
select*from QA_Questions a where 
a.QuestionId
<=
(
selectmax(c.QuestionId) from 
(
selecttop3  QuestionId  from QA_Questions b where b.CategoryId=a.CategoryId) c)
orderby CategoryId

selectDateDiff( ms,@t,getdate());set@t=getdate()
begin
    
WITH NewTable AS(
    
SELECT*,RANK() OVER
(PARTITION BY  CategoryId OrderBY  QuestionId) RANK
     
FROM  QA_Questions)
    
SELECT*FROM NewTable
    
WHERE RANK <4
end

selectDateDiff( ms,@t,getdate());set@t=getdate()

select a.questionid,a.categoryid
from dbo.QA_Questions a
where Questionid in (selecttop3 Questionid from QA_Questions where categoryid=a.categoryid 
orderby Questionid desc)orderby a.categoryid asc

selectDateDiff( ms,@t,getdate())

相關推薦

SQL 一個各個分類記錄

SQL2000的寫法一:select QuestionId,CategoryId,Title  from QA_Questions a where a.QuestionId<=(selectmax(c.QuestionId) from (selecttop3  QuestionId  from QA_Q

sql之將一個的數據註入另一個

一個表 .com 分享 兩個 image hbm inf left info sql之將一個表中的數據註入另一個表中 需求:現有兩張表t1,t2,現需要將t2的數據通過XZQHBM相同對應放入t1表中   t1:      t2:    思路:left join

sql語句】一個含有id和父親id,統計父親有多少個孩子

將表和他自己連線~ select * from tb_comment a left join tb_comment b on b.c_fatherid=a.cid 得到右側有空的結果,空的地方count(*)會被統計,用count(column)不會被統計~ 1)count(*

LeetCode:5. Longest Palindromic Substring(一個字串最大的子迴文串)

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of sis 1000. Example 1: Input

python實現:單鏈的倒數第K個元素

1、為了找出倒數第k個元素,最容易想到的辦法是首先遍歷一遍單鏈表,求出整個單鏈表的長度n,然後將倒數第k個,轉換為正數第n-k個,接下來遍歷一次就可以得到結果。但是該方法存在一個問題,即需要對連結串列進行兩次遍歷,第一次遍歷用於求解單鏈表的長度,第二次遍歷用於查詢正數第n-k

python字串面試題:一個字串第一個字母和最後一個字元是第一次重複,中間沒有重複且最長的子串

1.給出任意一個字串,列印一個最長子串字串及其長度,如果有相同長度的子字串,都要一起打印出來,該子字串滿足以下條件, 第一個字母和最後一個字元是第一次重複 這個子字串的中間字母沒有重複 這個子字串是滿足條件裡面的最長的 如: adsasadmasd 中滿足條件的是dmasd   im

一個字串最長並且不重複的子字串,要求時間複雜度越小越好

題目:找出一個字串中長度最長並且不含重複字元的子字串; 要解決這個問題有多種解法,在這裡我們來實現一種時間複雜度最小的方法,使用了雜湊值 程式碼如下:最終,時間複雜度為O(n),是用空間換時間來實現的。 //最長字元,開始位置的索引 public int startI

js演算法:一個字串出現次數最多的字元!

在其他部落格裡面看到了一種方法: 這個方法很簡單,但是15-20行程式碼對於萌新來說,不是很好理解,因此我給出了以下這個方案,先想辦法統計出所有字母各出現的次數,然後把這些次數push到一個數組裡面,找出最大的那個數(我這裡是通過排序找出的最大數),最大數有了,該數對應的字元不就很容易

[演算法]單鏈的倒數第k個元素

找出單鏈表中的倒數第k個元素 解題思路: 為了求出連結串列中的倒數第k個元素,最容易想到的方法是首先遍歷一遍單鏈表,求出整個單鏈表的長度n,然後將倒數第k個,轉換為正數第n-k個,接下去遍

Java:如何單鏈的倒數第k個元素

設定兩個指標,相差k個節點。//如何找出單鏈表中的倒數第k個元素 public class findelem { public static Node method(Node head,int k)

Python 實現 一個字串出現次數最多的字元並輸出該字元

'''演算法題二: 找出一個字串中出現次數最多的字正確的解決思路是: 利用collections 工具中的Counter,對列表中元素出現的頻率進行排序。 Counter返回值是一個按元素出現頻率降序排列的Counter物件,它是字典的子類,因此可以使用字典的方法'''fro

尋找一個字串的最長重複子串(字尾陣列)&一個字串最長不重複子串

一、尋找一個字串中的最長重複子串(字尾陣列) 字尾陣列其實可以看尋找一個字串中的最長重複子串(字尾陣列)作一個由字串s倒數i個字元組成的子串的集合,其中0<i<s.length(),例如 字串strstr的字尾陣列為: {r,tr,str,rstr,trstr,

淺談sql server把一個查詢出來的資料插入到另外一個

1、 insertintoA([id], ids,[name], type, time) select[id],null,[name],'dd',getdate()fromBwheretype='dd' 2、 DECLARE @num int,@i int; SET @

一個字串重複最多的字元以及出現的次數

package test.com; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(S

如何一個字串第一次且只出現一次的字元

     要找出一個字串中出現的字元,自然而然我們就會想到在ASCⅡ碼中共有256種字元,通過遍歷可以找出每種字元存在的個數,這就用到了ASCⅡ碼字元與編碼中的一一對映的關係。那麼就還需要知道字串的長

華為上機試題(java)一個字串出現次數最多的字元

 Java求字串中出現次數最多的字元,如String Str = "aaabbcddddee";那麼輸出:d 4 ;若String Str = "aaabbcddddeexxxxxx";那麼輸出:x 6 import java.util.*; import java.uti

Sql Server 將一個的資料複製到另個一

目標表存在 將table1中資料全部複製到table2中(table1,table2表結構一致) insert into table1  select * from table2 將table1中name為張三的資料複製到table2中(table1,table2表結構

python實現一個字串第一次不重複出現的字元

例:輸入:yellow       輸出:y      輸入:tooth      輸出:h思想:使用字典進行遍歷:def find_str(arr): dic={} for i in range(len(arr)): if arr[i] in

一個字串第一個只出現一次的字元

題目:在字串中找出第一個只出現一次的字元。如輸入 “abaccdeff”,則輸出b。 思路分析: (1)由於題目與字元出現的次數相關,那麼是不是可以統計每個字元在該字串中出現的次數?要達到這個目的,我們需要一個數據容器來存放每個字元出現的次數。在這個容器中可

Linked List Cycle 單鏈環路

問題:Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?解法1:使用兩個步伐不一樣的指標遍歷連結串列(eg:a