一个活动数据库,有开始时间,结束时间,活动ID,活动名称。 有按时间就有三个状态,活动中,报名中,已结束。 现在sql排序要按 活动中升序然后到报名中升序再到已结束倒序分页查询怎么写sql
时间: 2023-12-30 21:04:09 浏览: 86
可以使用以下 SQL 语句来实现:
```
SELECT * FROM activity
ORDER BY
CASE WHEN end_time < NOW() THEN end_time ELSE
CASE WHEN start_time > NOW() THEN start_time ELSE
NOW()
END
END ASC,
CASE WHEN start_time > NOW() THEN start_time ELSE
CASE WHEN end_time < NOW() THEN end_time ELSE
NOW()
END
END ASC
LIMIT 10 OFFSET 0;
```
其中,使用 CASE 语句来判断当前活动的状态:已结束(end_time < NOW())、活动中(start_time <= NOW() && end_time >= NOW())和报名中(start_time > NOW())。然后按照活动中升序,报名中升序,已结束倒序的顺序进行排序。最后使用 LIMIT 和 OFFSET 实现分页查询。
相关问题
广告表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告ID name varchar(50) 否 否 广告名称 position_id int 否 否 广告位置ID media_id int 否 否 媒体文件ID start_time datetime 否 否 广告开始时间 end_time datetime 否 否 广告结束时间 link varchar(100) 否 否 广告链接 status tinyint 否 否 广告状态:0-未开始,1-正在展示,2-已结束 广告位置表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告位置ID name varchar(50) 否 否 广告位置名称 width int 否 否 广告位置宽度 height int 否 否 广告位置高度 媒体文件表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 媒体文件ID name varchar(50) 否 否 媒体文件名称 type tinyint 否 否 媒体文件类型:0-图片,1-视频 url varchar(100) 否 否 媒体文件URL地址 width int 否 否 媒体文件宽度 height int 否 否 媒体文件高度 duration int 否 否 媒体文件时长(仅对视频有效)请用这个数据库,示例这三个表在springboot项目中的映射类
广告表的映射类:
```java
@Entity
@Table(name = "ad")
public class Ad {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name", length = 50, nullable = false)
private String name;
@ManyToOne
@JoinColumn(name = "position_id", nullable = false)
private AdPosition position;
@ManyToOne
@JoinColumn(name = "media_id", nullable = false)
private MediaFile mediaFile;
@Column(name = "start_time", nullable = false)
private LocalDateTime startTime;
@Column(name = "end_time", nullable = false)
private LocalDateTime endTime;
@Column(name = "link", length = 100, nullable = false)
private String link;
@Column(name = "status", nullable = false)
private int status;
// 省略 getter 和 setter 方法
}
```
广告位置表的映射类:
```java
@Entity
@Table(name = "ad_position")
public class AdPosition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name", length = 50, nullable = false)
private String name;
@Column(name = "width", nullable = false)
private int width;
@Column(name = "height", nullable = false)
private int height;
// 省略 getter 和 setter 方法
}
```
媒体文件表的映射类:
```java
@Entity
@Table(name = "media_file")
public class MediaFile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name", length = 50, nullable = false)
private String name;
@Column(name = "type", nullable = false)
private int type;
@Column(name = "url", length = 100, nullable = false)
private String url;
@Column(name = "width", nullable = false)
private int width;
@Column(name = "height", nullable = false)
private int height;
@Column(name = "duration")
private int duration;
// 省略 getter 和 setter 方法
}
```
注意:以上代码只是示例,具体的实现可能需要根据实际情况进行调整。同时,也需要在 Spring Boot 应用程序中配置相应的数据源和 JPA 实体管理器。
广告表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告ID name varchar(50) 否 否 广告名称 position_id int 否 否 广告位置ID media_id int 否 否 媒体文件ID start_time datetime 否 否 广告开始时间 end_time datetime 否 否 广告结束时间 link varchar(100) 否 否 广告链接 status tinyint 否 否 广告状态:0-未开始,1-正在展示,2-已结束 广告位置表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告位置ID name varchar(50) 否 否 广告位置名称 width int 否 否 广告位置宽度 height int 否 否 广告位置高度 媒体文件表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 媒体文件ID name varchar(50) 否 否 媒体文件名称 type tinyint 否 否 媒体文件类型:0-图片,1-视频 url varchar(100) 否 否 媒体文件URL地址 width int 否 否 媒体文件宽度 height int 否 否 媒体文件高度 duration int 否 否 媒体文件时长(仅对视频有效)请用这个数据库,示例这三个表的orm类
广告表的ORM类:
```python
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, SmallInteger
from sqlalchemy.orm import relationship
from datetime import datetime
from .base import Base
class Ad(Base):
__tablename__ = 'ad'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
position_id = Column(Integer, ForeignKey('ad_position.id'), nullable=False)
media_id = Column(Integer, ForeignKey('media_file.id'), nullable=False)
start_time = Column(DateTime, nullable=False, default=datetime.now)
end_time = Column(DateTime, nullable=False, default=datetime.now)
link = Column(String(100), nullable=False)
status = Column(SmallInteger, default=0)
position = relationship('AdPosition', backref='ads')
media_file = relationship('MediaFile', backref='ads')
```
广告位置表的ORM类:
```python
from sqlalchemy import Column, Integer, String
from .base import Base
class AdPosition(Base):
__tablename__ = 'ad_position'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
width = Column(Integer, nullable=False)
height = Column(Integer, nullable=False)
```
媒体文件表的ORM类:
```python
from sqlalchemy import Column, Integer, String, SmallInteger
from .base import Base
class MediaFile(Base):
__tablename__ = 'media_file'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
type = Column(SmallInteger, default=0)
url = Column(String(100), nullable=False)
width = Column(Integer, nullable=False)
height = Column(Integer, nullable=False)
duration = Column(Integer, default=0)
```
阅读全文