如何通过sql查询特定情况下的数据-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何通过sql查询特定情况下的数据

2018-11-20 09:39:48 1393 1

场景如下:
我有两个表alarm记录告警的详细信息. alarm_date记录每天是否有该告警产生.

我需要查询大于2018-11-11日有多少种告警产生.

那么sql可以这样写:

select distinct on (alarm.id) alarm.id, alarm.description join alarm_date on alarm_date.aid = alarm.id where alarm_date.create_time > '2018-11-11' order by alarm.id;

如果我需要根据告警命中次数排序应该怎么写呢?

select distinct on (alarm.id) alarm.id, alarm.description, alarm.hits join alarm_date on alarm_date.aid = alarm.id where alarm_date.create_time > '2018-11-11' order by alarm.id , alarm.hits desc;

这样的排序是不正确的, alarm.hits desc并不影响排序结果。

因为用到了distinct on这个方法, 必须指定order by的第一个字段是alarm.id

考虑过在这个sql上再套一层查询:

select * from (select distinct on (alarm.id) alarm.id, alarm.description, alarm.hits join alarm_date on alarm_date.aid = alarm.id where alarm_date.create_time > '2018-11-11' order by alarm.id ) order by alarm.hits desc;

但是这样观察到有的数据丢失了, 很奇怪。 针对这个需求, 应该怎么做比较好, 求指教。
(整理来自PostgreSQL技术进阶群)

取消 提交回答
全部回答(1)
  • redraiment
    2019-07-17 23:15:29

    因为问题描述中没有提到数据模型,我假设alarm表与alarm_date表的结构如下:

    create table alarm(
      id serial primary key,
      description text,
      hits int
    );
    comment on column alarm.hits is '告警的次数';
    
    create table alarm_date (
      id serial primary key,
      aid int references alarm,
      create_time timestamp
    );

    假设alarm与alarm_date是“one to many”的关系,则

    查询2018-11-11之后发生的告警,并按告警次数倒序的查询SQL如下:

    select
      id,
      description,
      hits
    from
      alarm
    inner join (
      select
       distinct
        aid
      from
        alarm_date
      where
        create_time > '2018-11-11'
    ) as records
    on
      alarm.id = records.aid
    order by
      hits desc
    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 127121浏览量 回答数 4

17

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1037266浏览量 回答数 17

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157676浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 336989浏览量 回答数 8

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 142052浏览量 回答数 38

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 128866浏览量 回答数 2

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259819浏览量 回答数 38

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305615浏览量 回答数 249

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 123690浏览量 回答数 97

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 204381浏览量 回答数 2
+关注
0
文章
21
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载