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

2013-11-10 22:44:57 +08:00
 1989922yan
这样一个表结构:

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语句怎么写呢??
3496 次点击
所在节点    MySQL
13 条回复
Jefei
2013-11-10 23:23:35 +08:00
子查询,具体就是这个样子
SELECT * FROM (SELECT * FROM tablename ORDER BY created_time DESC) t GROUP BY publish_time;
iMouseWu
2013-11-11 00:15:04 +08:00
select * from Table where publish_time > GETDATE() order by publish_time DESC,created_time DESC;这样可以吗?
msg7086
2013-11-11 08:47:48 +08:00
> 如果pulish_time相同

如果不同呢?

> 返回created_time大的

是返回一条最大的记录还是排序以后返回所有记录?
wayn3h0
2013-11-11 12:17:28 +08:00
1989922yan
2013-11-11 17:37:36 +08:00
@iMouseWu

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

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

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

THX!
1989922yan
2013-11-11 17:39:30 +08:00
@msg7086

> 如果pulish_time相同

如果不同呢?

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


————


> 返回created_time大的

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

>> 返回, publish_time相同的条目s中,created_time最大的
awanabe
2013-11-11 18:02:09 +08:00
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
2013-11-11 20:23:06 +08:00
@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
2013-11-12 00:27:06 +08:00
@1989922yan 这条语句的第一条就是满足的条件咯?那么可以加一个top 1咩,不就可以只选第一条了呀?
msg7086
2013-11-12 06:34:59 +08:00
@1989922yan
>> 如果不同,正常返回。
正常返回是返回什么?return '正常'?能不能把一句话说完整?或者给出几个测试用例也好啊。

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

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

你的回复,真的真的是神一样的指引了我。
@Jefei 是大神。
1989922yan
2013-11-12 14:00:40 +08:00
@Jefei

第一天早晨,我看到你的回复,就非常受用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88767

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX