新手需要有关查询的帮助(MYSQL)

时间:2018-11-21 09:30:17

标签: mysql sql

我是这里的新手,而SQL几乎是新手。

我的问题: 我有一张

的桌子(T1)

Datetime, CostNo, Amount

第二张表(T2)

Date, CostNo, BillNo

在查询中应为

Date, CostNo, BillNo, Amount

我的问题是同一天的同一费用编号的多个帐单编号。

我需要根据Datetime对BillNo进行排序。

T1 f.e。:

2018-11-02 11:14:52 3637    24.10  
2018-11-02 11:16:43 965     2.50  
2018-11-02 11:40:28 2552    3.50  
2018-11-02 11:40:51 2552    3.00  
2018-11-02 11:41:10 2552    3.50  
2018-11-02 11:41:36 2552    3.00  
2018-11-02 11:55:03 980     3.00  
2018-11-02 11:59:11 1976    3.00  

T2 f.e。:

2018-11-02  3637    26189  
2018-11-02  965     26190  
2018-11-02  2552    26191  
2018-11-02  2552    26192  
2018-11-02  2552    26193  
2018-11-02  2552    26194  
2018-11-02  980     26195  
2018-11-02  1976    26196  

所以我的查询:

select
T2.BillDate,
T2.CostNo,
T2.BillNo,
T1.Amount
from 
    `T2`,
    `T1`
where
    T1.CostNo =T2.CostNo
    AND DATE(T1.BillDateTime) = T2.BillDate

工作正常,直到CostNo 2552:

2018-11-02  3637    26189   24.10  
2018-11-02  965     26190   2.50  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26191   3.00  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26191   3.00  
2018-11-02  2552    26192   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26192   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26193   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26193   3.00  
2018-11-02  2552    26194   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  2552    26194   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  980     26195   3.00  
2018-11-02  1976    26196   3.00  

这应该是结果:

2018-11-02  3637    26189   24.10  
2018-11-02  965     26190   2.50  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  980     26195   3.00  
2018-11-02  1976    26196   3.00  

2 个答案:

答案 0 :(得分:1)

我猜你想要:

select T2.BillDate, T2.CostNo, T2.BillNo, T1.Amount
from `T2` join
     `T1`
     on T1.CostNo = T2.CostNo and DATE(T1.BillDateTime) = T2.BillDate
order by T!.CostNo, T1.BillDateTime DESC;

首先请注意正确使用JOIN从不FROM子句中使用逗号。 始终使用正确的,明确的,标准 JOIN语法。

第二,如果您希望结果按特定顺序排列,则您的查询应包含ORDER BY子句。 SQL表和结果集(不包含ORDER BY)表示无序集。因此,您需要一个ORDER BY。我猜您想将所有CostNo在一起,然后在每个<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Category * * @ORM\Table(name="category", indexes={@ORM\Index(name="fk_category_category_idx", columns={"parent_category_id"})}) * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository") */ class Category { /** * @var string * * @ORM\Column(name="name", type="string", length=255, nullable=false) */ private $name; /** * @var boolean * * @ORM\Column(name="enabled", type="boolean", nullable=false) */ private $enabled = true; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var \AppBundle\Entity\Category * * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="parent_category_id", referencedColumnName="id") * }) */ private $parentCategory; } 中按日期/时间排序。

答案 1 :(得分:0)

好的,谢谢您的帮助。我自己找到了解决方案。 如果有人会知道,就在这里: 表2中的BillNo链接到表1的DateTime。 因此,我在DateTime上使用SUM / GROUP BY和ORDER BY从表1构建了一个temporaray表,并添加了行ID(auto_increment)。 接下来,我从表2中构建一个临时表,按BillNo的顺序排序,并添加一个行ID。 现在,我可以使用T1.ID = T2.ID进行查询。就是这样。

随时发布更好和/或更短的解决方案。