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 中不返回