我是这里的新手,而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
答案 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进行查询。就是这样。
随时发布更好和/或更短的解决方案。