Oracle查询当月数据,若不存在则查询上个月数据
时间: 2024-02-19 16:03:56 浏览: 61
您好!针对您的问题,可以使用如下的SQL语句来实现:
```sql
SELECT *
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
UNION ALL
SELECT *
FROM your_table
WHERE date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -1)
AND date_column < TRUNC(SYSDATE, 'MONTH')
AND NOT EXISTS (
SELECT 1
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
)
```
以上SQL语句会先查询当月数据,如果数据不存在,则查询上个月的数据,同时要确保上个月的数据没有被包含在当月数据中。其中,`your_table`是您要查询的表,`date_column`是表示日期的列名。
相关问题
Oracle查询当月数据,若存在返回当月数据,若不存在则查询上个月数据
要实现当月数据存在则返回当月数据,当月数据不存在则返回上个月数据的查询,可以使用以下SQL语句:
```sql
SELECT *
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
UNION ALL
SELECT *
FROM your_table
WHERE date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -1)
AND date_column < TRUNC(SYSDATE, 'MONTH')
AND NOT EXISTS (
SELECT 1
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
);
```
以上SQL语句使用 `UNION ALL` 连接两个查询,第一个查询返回当月数据,第二个查询返回上个月数据。第二个查询中加入了一个 `NOT EXISTS` 子句,它会判断当前月份是否有数据,如果有数据,则第二个查询不会返回任何数据,否则会返回上个月的数据。
mybatis 实现oracle查询当月数据,若当月数据存在返回当月数据,若不存在返回上个月数据
您可以使用MyBatis的动态SQL语句来实现该功能。以下是一个实现Oracle查询当月数据的示例代码:
```xml
<select id="queryData" parameterType="java.util.Map" resultType="java.util.List">
SELECT *
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
</select>
```
这个查询语句会查询出当月的数据。如果您需要查询上个月的数据,可以使用以下代码:
```xml
<select id="queryData" parameterType="java.util.Map" resultType="java.util.List">
<choose>
<when test="count > 0">
SELECT *
FROM your_table
WHERE date_column >= TRUNC(SYSDATE, 'MONTH')
AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1)
</when>
<otherwise>
SELECT *
FROM your_table
WHERE date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -1)
AND date_column < TRUNC(SYSDATE, 'MONTH')
</otherwise>
</choose>
</select>
```
这个代码会先查询当月的数据,如果存在数据则直接返回,否则会查询上个月的数据并返回。`count`是一个传入参数,表示当月数据的数量。如果当月数据存在则传入大于0的值,否则传入0。
阅读全文