SQL查询根据日期返回结果

Posted

技术标签:

【中文标题】SQL查询根据日期返回结果【英文标题】:SQL Query to return results based on date 【发布时间】:2021-05-21 20:08:14 【问题描述】:

我对 SQL 很陌生,所以我为琐碎的事情道歉。

我们公司有售票系统,有两张桌子。

在一张桌子上,它会记录票证何时关闭。交易发布时的其他跟踪。

我想创建一个查询,返回所有处于关闭状态但交易在票被关闭后发布的票。

我有类似的东西:

SELECT a.proposal AS "Work Order"
     , a.status_code AS "Status"
     , a.status_date AS "Closed Date"
     , b.tranx_date AS "Transaction Date"
  FROM table1 a
 OUTER 
  JOIN table2 b
 WHERE b.tranx_date > a.status_date

然后,理想情况下,它会返回类似...

Work Order:    Status:    Closed Date:    Transaction Date:
0001           CLOSED     01/01/2021      01/02/2021
0002           CLOSED     01/01/2021      01/02/2021

我知道我的查询/语法不正确,我现在才学习 SQL 3 天。 任何帮助将不胜感激。

【问题讨论】:

@Strawberry 对不起,我因为没有提供足够的信息而受到批评,所以我想我过头了。 这很不寻常,没有“票号”或其他需要在两个表中匹配的标识符...将所有行的 tranx_date 与另一个表中所有行的 status_date 匹配,似乎会有半笛卡尔积,匹配不同票号的行。我也猜测我们可能还想要一个类似于AND a.status_code = 'CLOSED' 的条件,但这只是一个猜测 @spencer7593 啊,确实。我最终添加了一个WHERE a.status_code = 'Closed' 并返回了已关闭的票证。工单是票号,但我什至没想到他们也需要加入。 【参考方案1】:

mysql中你需要左连接

SELECT
 a.proposal AS "Work Order",
 a.status_code AS "Status",
 a.status_date AS "Closed Date",
 b.tranx_date AS "Transaction Date"
FROM table1 a
left JOIN table2 b ON b.tranx_date > a.status_date

对于左连接,您需要 ON 子句

因为使用与左连接表相关的列作为内连接

【讨论】:

这是朝着正确方向迈出的一大步,谢谢!它正在返回结果,但是它会根据票的打开日期而不是关闭日期返回结果。现在我需要弄清楚如何让它返回表中的最新条目而不是第一个。 我不在您的数据中,您只是在没有明确数据样本的情况下发布了预期结果..所以只能回答查询的结构和语法,但不能回答实际结果.. .. 不,你不在我的数据中。是的,您清除了查询的语法,对此我表示感谢。而且我还说我需要弄清楚最近的回报,我没有问你。

以上是关于SQL查询根据日期返回结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL ORDER BY 根据日期时间查询返回不正确的结果

标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回

使用AJAX根据下拉框返回查询结果

sql查询结果多对多转为一对多返回前端

SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示

mysql 返回的查询结果为空