› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
1989922yan
V2EX  ›  MySQL

[请教一个SQL查询语句,刚刚做mysql,比较尴尬]

  •  
  •   1989922yan · Nov 10, 2013 · 4457 views
    This topic created in 4702 days ago, the information mentioned may be changed or developed.
    这样一个表结构:

    id publish_time created_time
    1 2013-11-20 2013-11-10
    2 2013-11-20 2013-11-12
    3 2013-11-21 2013-11-10
    4 2013-11-22 2013-11-10
    5 2013-11-23 2013-11-10

    publish_time 是 发布时间
    created_time 是 创建时间

    我想要一个这样的查询:
    1. publish_time 大于 当前时间
    2. 如果pulish_time相同,返回created_time大的


    这样的SQL语句怎么写呢??
    13 replies  •  1970-01-01 08:00:00 +08:00
    Jefei
        1
    Jefei  
       Nov 10, 2013   ❤️ 1
    子查询,具体就是这个样子
    SELECT * FROM (SELECT * FROM tablename ORDER BY created_time DESC) t GROUP BY publish_time;
    iMouseWu
        2
    iMouseWu  
       Nov 11, 2013
    select * from Table where publish_time > GETDATE() order by publish_time DESC,created_time DESC;这样可以吗?
    msg7086
        3
    msg7086  
       Nov 11, 2013
    > 如果pulish_time相同

    如果不同呢?

    > 返回created_time大的

    是返回一条最大的记录还是排序以后返回所有记录?
    wayn3h0
        4
    wayn3h0  
       Nov 11, 2013
    1989922yan
        5
    1989922yan  
    OP
       Nov 11, 2013
    @iMouseWu

    是这样的,我想做的是: “如果 publish_time相同的话,只返回一条,这条是created_time最大的”。

    created_time是不会重复的,因为是一条一条插入的。

    可能是我没有表述清楚,你的返回值,会有重复。
    我想返回的是唯一啦~

    THX!
    1989922yan
        6
    1989922yan  
    OP
       Nov 11, 2013
    @msg7086

    > 如果pulish_time相同

    如果不同呢?

    >> 如果不同,正常返回。


    ————


    > 返回created_time大的

    是返回一条最大的记录还是排序以后返回所有记录?

    >> 返回, publish_time相同的条目s中,created_time最大的
    awanabe
        7
    awanabe  
       Nov 11, 2013
    1.如果不要ID的话....可以这样...
    select publish_time, max(created_time) from table_x where publish_time > now() group by publish_time

    2.如果ID和created_time是同步增长的, 可以加上max(id)就行...

    3. 如果ID和create_time是乱序的...
    呵呵...感觉要写存储过程了...
    1989922yan
        8
    1989922yan  
    OP
       Nov 11, 2013
    @awanabe

    感觉有些不满足要求。

    真是的表结构:

    +----------------------+---------------------------------+
    | Field | Type |
    +----------------------+---------------------------------+
    | Adid | int(10) unsigned |
    | title | varchar(100) |
    | Imageid | int(10) unsigned |
    | content | text |
    | summary | varchar(1000) |
    | edited_comments_text | varchar(4000) |
    | publish_time | timestamp |
    | created | timestamp |
    | type | enum('homeAd','sideAd','topAd') |
    | isTopUsed | enum('on','off') |
    | adUri | varchar(50) |
    +----------------------+---------------------------------+

    你看到的,数据之间都是有联系的,之所以有那样的筛选条件,都是为了,能 取得对应的 Imageid.
    iMouseWu
        9
    iMouseWu  
       Nov 12, 2013
    @1989922yan 这条语句的第一条就是满足的条件咯?那么可以加一个top 1咩,不就可以只选第一条了呀?
    msg7086
        10
    msg7086  
       Nov 12, 2013   ❤️ 1
    @1989922yan
    >> 如果不同,正常返回。
    正常返回是返回什么?return '正常'?能不能把一句话说完整?或者给出几个测试用例也好啊。

    根据你给出的暧昧不清的问题条件,大致可以这样写
    SELECT * FROM ¥TABLE¥ WHERE publish_time > NOW() ORDER BY publish_time ASC, created_time DESC LIMIT 1

    >> created_time是不会重复的,因为是一条一条插入的。
    一条一条插入,与time不会重复有什么关系?
    1989922yan
        11
    1989922yan  
    OP
       Nov 12, 2013
    @iMouseWu 这次没有真实地测试,不过,我猜测, top 1 之后,就没有 “其他group”的 “第一条” 数据啦~~
    1989922yan
        12
    1989922yan  
    OP
       Nov 12, 2013
    @Jefei

    你的回复,真的真的是神一样的指引了我。
    @Jefei 是大神。
    1989922yan
        13
    1989922yan  
    OP
       Nov 12, 2013
    @Jefei

    第一天早晨,我看到你的回复,就非常受用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   844 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:56 · PVG 04:56 · LAX 13:56 · JFK 16:56
    ♥ Do have faith in what you're doing.