跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教把三个 SELECT 操作整合到一个 SELECT 能解决的语句?
未分類
1 9 月 2020

请教把三个 SELECT 操作整合到一个 SELECT 能解决的语句?

请教把三个 SELECT 操作整合到一个 SELECT 能解决的语句?

資深大佬 : qazwsxkevin 10

以前写的语句:
SELECT 生成时间 FROM result WHERE `型号`=’1′ ORDER BY 生成时间 DESC LIMIT 1;
SELECT 生成时间 FROM result WHERE `型号`=’2′ ORDER BY 生成时间 DESC LIMIT 1;
SELECT 生成时间 FROM result WHERE `型号`=’3′ ORDER BY 生成时间 DESC LIMIT 1;

生成时间是 datatime
程序拿到结果后,再本地算法算出最小(时间最早的值)
请问如果在 Mysql 语句上,如何实现一句出结果呢?
`型号`=’3’很有可能没有存在。。。

大佬有話說 (24)

  • 資深大佬 : saulshao

    照下面这样写就行了,直接出结果。
    ···
    SELECT 生成时间 FROM result WHERE `型号`in (1,2,3) ORDER BY 生成时间 DESC LIMIT 1;
    ···

  • 資深大佬 : jay0726

    刚想回复,上抢先一步啊

  • 資深大佬 : saulshao

    为啥这个 md 语法不起作用?

  • 資深大佬 : wangyanrui

    union 成临时表,然后排序加 limit 1
    但是这玩意如果性能压力不是特别大,还是代码处理吧,可读性太差了

  • 資深大佬 : saulshao

    写错,markdown

  • 資深大佬 : wangyanrui

    瞎了,一正解。以为不是同一个表

  • 資深大佬 : saulshao

    这玩意如果不是性能压力特别大,反而不建议代码处理,因为这东西外面套个函数,就相当于可读性了。

  • 資深大佬 : MeowOvO

    “`
    SELECT 生成时间 FROM result WHERE `型号`in (1,2,3) ORDER BY 生成时间 DESC LIMIT 1;
    “`
    @saulshao Test

  • 資深大佬 : MeowOvO

    @MeowOvO OK 也不好用=-=

  • 資深大佬 : aborigine

    select min(生成时间) from result where 型号=1 or 型号=2 or 型号=3

  • 資深大佬 : aborigine

    如果生成时间没有索引 那用 min 效率更高

  • 資深大佬 : ysc3839

    @saulshao @MeowOvO
    回复内容不支持 MarkDown 。

  • 資深大佬 : mcdunc

    lz 是想分别把型号为 1,2,3 的最早生成时间给抽出来吗还是查总体的最早生成时间?如果按 1 的那种查出来的不应该是总体的最早吗?

  • 資深大佬 : a719114136

    select 型号,min(时间) from xx where 型号 in(1,2,3) group by 型号

  • 資深大佬 : someonedeng

    SELECT * from (SELECT 生成时间,1 as 型号 FROM result WHERE `型号`=’1′ ORDER BY 生成时间 DESC LIMIT 1 ) t1 union all
    SELECT * from (SELECT 生成时间,2 as 型号 FROM result WHERE `型号`=’2′ ORDER BY 生成时间 DESC LIMIT 1 ) t2 union all
    SELECT * from (SELECT 生成时间,3 as 型号 FROM result WHERE `型号`=’3′ ORDER BY 生成时间 DESC LIMIT 1) t3;

    ![20200828001706.png]( https://i.loli.net/2020/08/28/KsEdn2bCLhtMm9T.png)
    ![20200828001657.png]( https://i.loli.net/2020/08/28/GfwKF2HCMZ7tmQU.png)

  • 資深大佬 : lyusantu

    不考虑性能情况下,内层 union,外层再 select * limit 一次即可

  • 資深大佬 : xuanbg

    @saulshao 你这个不等价啊,人家是每个型号 1 条,你的可能 3 条都是 1 个型号。

    正确答案是使用 union all 关键词。

    SELECT 生成时间 FROM result WHERE `型号`=’1′ ORDER BY 生成时间 DESC LIMIT 1 union all
    SELECT 生成时间 FROM result WHERE `型号`=’2′ ORDER BY 生成时间 DESC LIMIT 1 union all
    SELECT 生成时间 FROM result WHERE `型号`=’3′ ORDER BY 生成时间 DESC LIMIT 1;

  • 資深大佬 : xuanbg

    @xuanbg sql 复制过来忘记改了,15 的是正确的。

  • 資深大佬 : guanhui07

    “`
    unionall
    “`

  • 資深大佬 : coderfox

    SELECT 型号, MAX(生成时间) FROM result WHERE 型号 IN (‘1’, ‘2’, ‘3’) GROUP BY 型号 ORDER BY 型号, 生成时间 DESC;

  • 資深大佬 : coderfox

    @coderfox #20 更正一下,只需要 SELECT 型号, MAX(生成时间) FROM test WHERE 型号 IN (‘1’, ‘2’, ‘3’) GROUP BY 型号;

  • 資深大佬 : jzmws

    考虑用 case ?

  • 資深大佬 : bigpower777

    SELECT
    s1.d1,
    s2.d2,
    s3.d3
    FROM
    (select CREATE_DATE as d1 from account_system where MZ=’01’ ORDER BY CREATE_DATE desc limit 1) s1,
    (select CREATE_DATE as d2 from account_system where MZ=’02’ ORDER BY CREATE_DATE desc limit 1) s2,
    (select CREATE_DATE as d3from account_system where MZ=’03’ ORDER BY CREATE_DATE desc limit 1) s3

  • 資深大佬 : gaius

    pg 或者 mysql8 用窗口函数

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具