mysql 排序優先 sql優先排序

2021-10-18 10:16:31 字數 1143 閱讀 1873

廣告表info_ad裡有在用的服務(end_time沒有過期),過期的了服務,需要這樣取出前30個廣告編號(ad_id),在用的服務優先取出來,如果不夠30個,就隨機取過期的服務,直到總共30個為止,...

廣告表info_ad裡有在用的服務(end_time沒有過期),過期的了服務,需要這樣取出前30個廣告編號(ad_id),

在用的服務優先取出來,如果不夠30個,就隨機取過期的服務,直到總共30個為止,然後這30個廣告隨機排序。

要求只能有一句sql查詢,(用零時表加動態sql不允許)我也用動態的寫出來了 到真實專案查詢裡不合適 所以要用一條sql語句來完成,

info_ad 表暫定就那ad_id int 和end_time datetime 兩個字段,服務過期暫定為『2011-2-1』

用零時表的話 我自己寫出來了的 所以就不要給我推薦零時表了

create table #temp(

id int identity primary key,

ad_id int,

end_time datetime

declare @top1 int;

declare @top2 int;

insert into #temp select * from info_ad2 where end_time

set @top1=(select @@rowcount);

set @top2=5-@top1;

print @top2

if @top1<5

begin

set rowcount @top2

insert into #temp select * from info_ad2 where end_time!

set rowcount 0

endselect * from #temp order by newid()

drop table #temp

問題已經解決,感謝3樓。現在寫乙個完善點的sql語句

select top 30 (case when end_time>='2011-1-26' then 0 else 1 end) as is_expire, *

from info_ad

order by is_expire,newid()

展開

MySQL 先排序後去重

前言 近來開始寫後端,先從小bug入手,記錄下有趣的sql 1.需求 根據表中的a欄位排序,然後再根據b欄位去重 2.實現 第乙個sql語句 select distinct name from student where id 1111 order by age desc發現結果集中已去重,但是並沒...

mysql 先排序再分組的sql語句實現

最近專案中有乙個需求,需要先分組,再排序的功能。搞了好久,經過敏大大 後台兄弟 指導,終於搞出來了,分享給大家 demo 學生資訊表 第一時間想到 sql select from t test group by name,type order by score desc 結果 發現,並不能滿足我們需...

mysql資料庫優先 MySQL 優先條件

我有乙個名為term的表,其id,名稱,school id和klass id為屬性.我想返回滿足條件之一的記錄.在詳細解釋問題之前,請看一下表輸出 id name school id klass id 1 term1 null null 2 term2 null null 3 term1 1 4 4...