How to model a vase with a hole through it? I'm trying to model this vase on the left in this picture,

However, I'm still a beginner in Blender, and the furthest I could go is as depicted in the screenshot below:

As you can see, the beginning was promising, but applying the subdivider made it horrible.
I started from a cube building up, and used Boolean difference to subtract the hole inside.
I'm not looking for a full solution, I just need guidelines like how should I start? a plane? a cube?
shall I start from low model and then apply a subdivider? or I should start as smooth as possible?
EDIT:
I took @Simon approach, I started with a cylinder, squashed it at the bottom, and unsquashed at the top, after the boolean with another perpendicular cylinder, things got ugly and I had to cut faces to make them Quads instead of NGON.
This is the best I could do:

EDIT2:
More progress, this time, to do the boolean, I extracted the edge from the original body, and extrude it to create the boolean operand, this is the result before Subdivider modifier. Do I have to clean the body manually? like moving vertices, merging them, cut some faces? or there is a faster way (considering I have to repeat the process on four sides (unless I have to use Mirror))?

EDIT 3
I fixed the model after the boolean, and the results are better, but still can't get it perfect:

Especially these areas:

Edit 4:
I started over again, to follow @Simon instructions, the results? Amazing.
Check it out:
Ignore the hole to begin with. The main shape appears to be a squashed cylinder, so create the main outline by scaling down one axis, then loop cutting/extruding and scaling to create the overall shape. For the neck the shape is circular so un-squash this section. For the large hole, boolean a cylinder then clean up the geometry afterwards.


Start with a 16 sided cylinder. I used a 100mm rad and 350mm height. Scale it down on one axis. Add loop cuts.

From bottom ring to top I scaled by about .7, .9, 1, .9, .6, .1, .1. Rounded the neck rings. Added supporting loops for the neck and base. Inset and extruded the neck downward. Delete end N-Gons then used Grid Fill to finish.

Add a 10 sided cylinder and shape accordingly. I am trying to end up with an easy way to create quads after the boolean so am looking to position the new cylinder vertices close to the vase vertices.

Snap and merge the resulting vertices together, creating quads. Tidy up the mesh. At this step I deleted half the model and mirrored the mesh to save time. Remember to flip normals on the mirror. Add supporting loops to the inner ring.

Subdivision result. This worked out better than my first attempt as there are now no triangles in the bottom corners of the hole.